Ruby 多重代入
こんにちはかわです。
アドベントカレンダー11記事目です。
書きます。
何をするか
この本を大分前に買って読んでた。
読みきれてなく覚えておきたいことを記憶する目的で書く。
現在は第二版が出ているが、基礎的な部分は変わらないので学習する。
リファレンスも参考にしている
実行環境
Ruby 2.4.2
多重代入
左辺と右辺の式をカンマで区切ることでそれぞれに代入
a, b = 1, 2 a # => 1 b # => 2
その際右辺は配列に変換されて代入される。
上記の状態で右辺を配列にしても代入可能
a, b = [1, 2] a # => 1 b # => 2
左辺で余った変数にはnil
a, b = 1 a # => 1 b # => nil
右辺で余った要素は無視
a, b = 1, 2, 3 a # => 1 b # => 2
左辺の最後の式に*をつけることで、余った要素を配列として代入
a, *b = 1, 2, 3 a # => 1 b # => [2, 3]
右辺の先頭要素だけを代入
a , = 1, 2, 3 a # => 1 a, * = 1, 2, 3 a # => 1 #おまけ a = 1, 2, 3 a # => [1, 2, 3]
右辺末尾だけ代入
* , a = 1, 2, 3 a # => 3
要素すべてを削除
* = 1, 2, 3 #使いみち #メソッドの引数を無視したいときに使用 def test1(*) puts "OK" end def test2 puts "OK?" end test1(1, 2) # => nil "OK"が出力 test2(1, 2) # => ArgumentError: wrong number of arguments (given 2, expected 0)
右辺に配列がある場合,左辺を()でネストすることで代入可能
a, (b, c) = 1, [2, 3] a # => 1 b # => 2 c # => 3