在ruby中字符串前面的加号有什么作用?

ebdffaop  于 9个月前  发布在  Ruby
关注(0)|答案(1)|浏览(129)

我有一个代码,看起来像

value = +"#{x}/part"
value << "/part2"

字符串
我知道这个值会包含类似valueOfX/part/part2的东西,但我不明白为什么字符串前面有+。我试着搜索它,但搜索引擎不太能理解“字符串ruby前面的加号”是什么意思。我也试着在在线ruby repl中运行这个,当+被添加或不被添加时没有区别。
所以问题是,为什么像这样有+是有用的?

flseospp

flseospp1#

如果字符串被冻结,则返回重复的可变字符串。
如果字符串没有冻结,则返回字符串本身。
来源:https://ruby-doc.org/core/String.html#method-i-2B-40
所以在你的例子中,由于你的字符串没有被冻结,你的代码等价于:

value = "#{x}/part"

字符串

编辑:

正如@stefan在评论中解释的那样,在Ruby 2.x中,插值字符串被冻结为frozen_string_literal: true。所以value = +"#{x}/part"不等同于value = "#{x}/part"。Ruby 3不再是这种情况。

相关问题