Ruby のコードをレビューしてるときに、文字列とHashを演算子%
で処理しているコードに出会い、意味が理解できなくて苦労した。
具体的にはこんなコード。
$my_preference = {
"seafood".to_sym => "salmon"
}
my_cheese = "I love %{cheese} cheese."
my_cheese %= $my_preference
おそらく、この X %= B
は X = X % B
の代入演算子なんだろうけど、それでは % は何をするのかと思って調べた。
この場合、X
は文字列でB
はHashなので、当然ながら整数除算の「あまり」の計算じゃないし…、Ruby って不思議すぎと思ったら、Help and documentation for the Ruby programming language.のClass: String - str % arg → new_strに説明がありました。
%{
と}
で囲まれた文字列をキーとしてHashから取り出した値で、%{
から}
を置き換えてくれるようです。
以下にサンプルコードと出力内容を付けます。
$my_preference = {
"meet".to_sym => "pork",
"seafood".to_sym => "salmon",
"vegitable".to_sym => "cucumber",
"fruite".to_sym => "strawberry",
"cheese".to_sym => "cheddar"
}
seafood_tmpl = "My favolit seafood is %{seafood}."
puts seafood_tmpl #=> My favolit seafood is %{seafood}.
my_seafood = seafood_tmpl % $my_preference
puts my_seafood #=> My favolit seafood is salmon.
my_cheese = "I love %{cheese} cheese."
puts my_cheese #=> I love %{cheese} cheese.
my_cheese %= $my_preference
puts my_cheese #=> I love cheddar cheese.
便利です。