3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者必読】Ruby の誤解あるあるAdvent Calendar 2020

Day 18

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

Last updated at Posted at 2020-12-17

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

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」と書くべきでしょう。知らんけど。

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?