1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Ruby の #{ } は変数展開じゃない

以下のコードを見てください。

name = "Ruby"
puts "Hello, #{ name }!"

実行すると

Hello, Ruby!

が表示されます。
2 行目の文字列リテラルの中に, #{ name } という部分があります。
これのことを「変数展開」と書いている記事が非常に多いのですが,PHP や Perl などのそれとは異なり,Ruby の場合は中に式が書ける,ということが本質的に重要です1
それゆえ,式展開 と呼ばれています。

以下のようなことができます。

scores = {
  Foo: 3,
  Bar: 8,
  Baz: 5,
}

puts "Total score of #{ scores.keys.join(", ") } is #{ scores.values.sum }."
# => Total score of Foo, Bar, Baz is 16.

英語としておかしいじゃんよ2,というツッコミは無しでお願いします。
また,こんなふうに複雑な式を入れるのがよいかどうかはまた別問題として。

この例では," " で記述した文字列リテラルの式展開の中で " " を使っていますが,とくに問題なく意図どおりに解釈される,ということが見て取れます。

それにしても「式展開」って用語は若干引っかかるものがあります。展開って?
「式埋め込み」とか「式挿入」とかじゃダメだったのかな。


  1. 最新版の PHP でどうなのかは知らない。また,PHP でも変数展開のところに式を書く手段がある。参考:PHPで文字列リテラルに式展開 - Qiita 

  2. 「Foo, Bar, and Baz」もしくは「Foo, Bar and Baz」と書くべきでしょう。知らんけど。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?