我在 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
但不建议这样做。想象一下有多少代码会因为这个补丁而被破坏。您最好为此类操作定义另一种方法。
更新
如果只有一个特定数组需要这种行为,那么最好的解决方案是:
array = [1, 2, 3, 4, 5]
def array.[](index)
super index % size
end
puts array[6] # => 2
是的,Ruby 允许这样做:-)