2

ruby-lang.org で Ruby の 20 分間のチュートリアルを行っているときに、irb をいじっているこのコードに出くわしました。

irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end

説明に基づいて、その#{name}部分は文字列に変数を追加するだけですか? これは奇妙で冗長な書き方だと思ったので、試してみよう"Hello" + nameと思ったのですが、まったく同じように機能しました..

意味を見つけようとしてグーグルで検索しましたが、#{}それについて話しているものが見つからないので、コミュニティに尋ねてみようと思いました.. 違いは何ですか? ありますか?

前もって感謝します!

4

5 に答える 5

5

使用し+た方が簡単な場合もありますが、この場合は感嘆符を省略しています。検討:

puts "Hello #{name}!"

対。

puts "Hello " + name + "!"

特に文字列で数回使用すると、最初のほうが読みやすいと思います。

また、2 番目のバージョンでは、"Hello" の後のスペースを簡単に省略できたことも考慮してください。

puts "Hello" + name + "!"

書くのは簡単ですが、おそらくあなたが言いたいことではありません。

最後に、補間するものが文字列でない場合は、さらに大きな違いが生じます。

puts "The Winner was #{name} with a score of #{score}!"

ちなみに、「文字列補間」で検索すると、単に構文を検索するよりも簡単に見つけることができるでしょう。

于 2012-07-24T21:52:30.007 に答える
4
"Hello #{name}!"
"Hello " + name + "!"

特に補間する値が複数ある場合、文字列補間はほとんどの場合、はるかに読みやすくなります。

補間される値が冗長な場合は、難しくなる可能性があります。

"Attendees: #{names.collect(&:first_name).join(', ')}"

そのような場合、連結するか、単に一時変数を使用することができます。

于 2012-07-24T21:53:55.220 に答える
2

読みやすさだけではないことに注意することが重要です。to_s文字列補間を使用すると、間にあるものを呼び出すなど、正しいことが行われます#{}

1.9.3p194 :001 > "as" + 23
    TypeError: can't convert Fixnum into String
    from (irb):1:in `+'
    from (irb):1
    from /Users/paul/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'

とは対照的に

1.9.3p194 :002 > "as #{23}"
 => "as 23" 
于 2012-07-24T21:58:54.370 に答える
2

最大の違いは、読みやすさ、慣用的な使用法への準拠、および速度です。

Youを使用する場合 (Ruby インタープリター) は、追加の文字列を 1 つしか作成しない場合とは"Hello " + name + "!"対照的に、合計 3つの追加の文字列を作成します。"Hello #{name}!"

文字列補間 ( "#{}") を使用すると、 が自動的に呼び出されることに注意し#to_sてください。これは、必要な場合とそうでない場合があります。

詳細については、この SO の質問を参照してください。

于 2012-07-24T22:06:24.670 に答える
1

#{} は文字列補間に使用され、文字列にデータを簡単かつ明確に配置できます。Ruby は中括弧内のコンテンツを評価し、そのto_sメソッドを呼び出します。このメソッドは、すべての Ruby オブジェクトが Object から継承します。

これにより、文字列内で計算を行うこともできます。

"5 + 7 = #{5 + 7}"
=> "5 + 7 = 12"
于 2012-07-24T21:59:45.507 に答える