Ruby 2.0 に配列があります。
arr=[1,2,3,4,5]
私は次のようなことができるようにしたいと思います:
arr[6] #=> 2
つまり、配列の最後にロールオーバーして再起動します。それは可能ですか?
これはうまくいきます:
arr = [1,2,3,4,5]
arr[6 % arr.size] #=> 2
はい、Array
次のような方法でクラスにパッチを適用できます。
module RollOver
def [](index)
super index % size
end
end
Array.class_eval do
prepend RollOver
end
array = [1, 2, 3, 4, 5]
puts array[6] # => 2
しかし、それはお勧めできません。このパッチにより、どれだけのコードが壊れる可能性があるか想像してみてください。そのような操作には別のメソッドを定義することをお勧めします。
アップデート
この動作が特定の 1 つのアレイのみに必要な場合、最適な解決策は次のとおりです。
array = [1, 2, 3, 4, 5]
def array.[](index)
super index % size
end
puts array[6] # => 2
はい、Ruby はそれを許可します :-)