通常、Arrayクラスのオブジェクトで範囲外のindexを指定するとnilが返ります。
> message_array = ['success', 'warning', 'info', 'danger']
> message_array[4]
=> nil
しかし
範囲外のindexを指定した際、良しなにindexをループさせて欲しい場面があったので、紹介します。
(上記の例だとmessage_array[4]を指定した時にsuccess
を返して欲しい)
動作環境
rails 5.2.2.1
準備
Arrayクラスを拡張する
lib/core_extにArrayクラス拡張用のファイルを作成します。
/lib/core_ext/array.rb
class Array
def values_at_loop(index)
self[index % length]
end
end
initializerで上記ファイルをrequireします。
/config/initializers/extensions.rb
require 'core_ext/array'
準備は以上です。
実行方法
values_at_loop(index)
の形式でメソッドを呼び出します。
> message_array = ['success', 'warning', 'info', 'danger']
=> ["success", "warning", "info", "danger"]
> message_array.values_at_loop(0)
=> "success"
> message_array.values_at_loop(1)
=> "warning"
> message_array.values_at_loop(2)
=> "info"
> message_array.values_at_loop(3)
=> "danger"
> message_array.values_at_loop(4)
=> "success"
> message_array.values_at_loop(5)
=> "warning"
> message_array.values_at_loop(6)
=> "info"
> message_array.values_at_loop(7)
=> "danger"
> message_array.values_at_loop(8)
=> "success"
> message_array.values_at_loop(-1)
=> "danger"
まとめ
使い所はめちゃめちゃ少ないですが、ルーレットのような回転する構造を配列で表現したい時などに使えそうです。