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

しかし、それはお勧めできません。このパッチにより、どれだけのコードが壊れる可能性があるか想像してみてください。そのような操作には別のメソッドを定義することをお勧めします。

アップデート

この動作が特定の 1 つのアレイのみに必要な場合、最適な解決策は次のとおりです。

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

def array.[](index)
  super index % size
end

puts array[6] # => 2

はい、Ruby はそれを許可します :-)

于 2013-10-23T09:43:51.597 に答える