我在Ruby 2.0中有一个数组:
arr=[1,2,3,4,5]
我希望能够做到这样的事情:
arr[6] #=> 2
那就是 - 滚动数组的末尾并重新启动。这可能吗?
答案 0 :(得分:2)
这样可行:
arr = [1,2,3,4,5]
arr[6 % arr.size] #=> 2
答案 1 :(得分:1)
是的,可以通过这种方式修补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允许: - )