1

我在 Ruby 2.0 中有一个数组:

arr=[1,2,3,4,5]

我希望能够做类似的事情:

arr[6] #=> 2

那就是 - 翻转阵列的末端并重新启动。那可能吗?

4

2 回答 2

2

这会起作用:

arr = [1,2,3,4,5]
arr[6 % arr.size] #=> 2
于 2013-10-23T10:29:57.233 回答
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 允许这样做:-)

于 2013-10-23T09:43:51.597 回答