右代入
masterに現在導入されているシンタックスで、その名の通り左から右へと値を代入することができる。
例えばこんな感じのコードが書ける。
:hoge => temp # temp に:hoge が代入される
Railsなどでメソッドチェーンがかなり長くなった時とかに便利そうという話はチケットに出てた。
たぶんこんな感じでコードを書けるのでうれしいって話
User.first.name => current_user_name # current_user_name にユーザーの名前が代入される
あとはこんな感じでifの分岐結果を受け取れるので読みやすいよねとか
if flag 42 else 21 end => result # ifの結果がresultに代入される
意外と使いどころはありそうな感じ
遊んでみた
ためしにputs
に渡したときにどうなるのかやってみた
puts :hoge => args # イメージとしては puts args = :hoge
結果としてはName Error
が発生した。
どうやら:hoge => args
をハッシュとしてパースするためエラーになる模様
なので、()
で括ると動くようになる。
puts (:hoge => args) #=> hoge
これは(:hoge => args)
を優先するためargs = :hoge
と同じ式となるため
また以下のケースでも動作する
args = nil puts :hoge => args #=> {:hoge => nil}
これは:hoge => args
が{:hoge => nil}
となるため
なので、中途半端に動作するコードとか起きそうなので初学者の人混乱するかもしれないな……
結論
右代入で変数に値を渡して、メソッドに引数として渡す場合は( )
で括ること
あと引数がHashとしてパースされるので注意が必要