📑

[Bug #20957] Array#values_at に負のRangeを渡したときの挙動に関するチケット

に公開

[Bug #20957] RangeError on Array#values_at with negative ranges

p ["a", "b", "c", "d"].values_at(1, 3)   #=> ["b", "d"]
p ["a", "b", "c", "d"].values_at(0..2)   #=> ["a", "b", "c"]
  • このチケットでは以下のように Array#values_at に範囲外の値を渡したときに負のRange だけ例外になるのは意図する挙動なのか、という内容
[0, 1, 2, 3].values_at(10)       #=> [nil]
[0, 1, 2, 3].values_at(10..10)   #=> [nil]
[0, 1, 2, 3].values_at(-10)      #=> [nil]
[0, 1, 2, 3].values_at(-10..-10) #=> 'Array#values_at': -10..-10 out of range (RangeError)
  • これ以外にもいくつか奇妙な挙動があるみたいですね
  • また Array#fill でも似たような挙動があるみたですねー
[0,1,2,3].fill(10, -10..-5) #=> RangeError
[0,1,2,3].fill(10, -5..-3)  #=> RangeError
[0,1,2,3].fill(10, -3..3)   #=> [0, 10, 10, 10]
[0,1,2,3].fill(10, 3..10)   #=> [0, 1, 2, 10, 10, 10, 10, 10, 10, 10, 10]
  • このあたりの期待する挙動はどういう形がよいのか
GitHubで編集を提案

Discussion