Ruby中数组的翻转

Ruby中数组的翻转,ruby,arrays,ruby-2.0,Ruby,Arrays,Ruby 2.0,我在Ruby 2.0中有一个数组: arr=[1,2,3,4,5] 我希望能够做到以下几点: arr[6] #=> 2 即-滚动阵列的末端并重新启动。这可能吗?是的,可以通过以下方式修补数组类: 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]

我在Ruby 2.0中有一个数组:

arr=[1,2,3,4,5]
我希望能够做到以下几点:

arr[6] #=> 2

即-滚动阵列的末端并重新启动。这可能吗?

是的,可以通过以下方式修补
数组
类:

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允许:-)

这将起作用:

arr = [1,2,3,4,5]
arr[6 % arr.size] #=> 2

不需要,但是您可以修补数组的
[]()
方法,并使其按照您的意愿运行!我认为您不应该这样做…最好使用相应的方法扩展
Array
,而不是覆盖现有的方法,这可能会导致意外的行为。那么
arr[6%arr.size]
Stefan呢,您能提供一个答案吗?那么我会批准的。这是最好、最简单的解决办法。我同意——这不是办法(即使可行)。我不需要让它在所有阵列上都可用——只有一个。啊,在这种情况下,有一个很好的解决方案。请看一分钟后的更新。好的-Stefan首先给出了这个建议,但请看我在他的回答下的评论。