奇怪的Ruby语法?

bru*_*ski 2 ruby string hash

我正在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
Run Code Online (Sandbox Code Playgroud)

根据解释,该#{name}部分只是将变量添加到字符串?我认为这是一种奇怪而冗长的编写方式所以我只是想我会尝试"Hello" + name并且它的工作方式完全相同..

我在谷歌周围试图找到一个意义#{},我找不到任何谈论它,所以我想我会问社区..有什么区别?有吗?

提前致谢!

Dar*_*tle 5

有时使用+更容易,但在这种情况下,您不会感到惊叹号.考虑:

puts "Hello #{name}!"
Run Code Online (Sandbox Code Playgroud)

puts "Hello " + name + "!"
Run Code Online (Sandbox Code Playgroud)

我发现第一个更易读,特别是在字符串中多次使用时.

还要考虑在第二个版本中"Hello"之后省略空间是多么容易:

puts "Hello" + name + "!"
Run Code Online (Sandbox Code Playgroud)

很容易写,但可能不是你的意思.

最后,当您插入的内容不是字符串时,它会产生更大的差异:

puts "The Winner was #{name} with a score of #{score}!"
Run Code Online (Sandbox Code Playgroud)

顺便说一句,搜索"字符串插值"可能会使查找事物变得更容易,而不仅仅是搜索语法.

  • 保罗在这一个上为我们骑霰弹枪!;) (2认同)