我不明白为什么这不起作用;所有三个元素都应该是字符串。
i = 5
base = "somestring"
base = i.to_s +" #{base} " + i.to_s # => Undefined method '+@'
为什么将其解释为方法?我想这可能与设置有关base
等于其自身的一部分,但这似乎有效:
base = "#{base}"
好问题!在红宝石中,+@
方法定义一元 + 运算符的行为。换句话说,它定义了当你有这样的表达式时会发生什么+someSymbol
.
所以,在这种情况下,它会看到你的表情部分,+" #{base} "
并尝试将一元 + 方法应用于不存在的字符串。
尝试在之间添加空格+
和字符串的开头。
同样有趣的是,这种情况只发生在某些情况下。
i = 2
i.to_s +"foo" # => NoMethodError: undefined method `+@` for "foo":String
"2" +"foo" # => "2foo"
发生什么了?i.to_s +"foo"
相当于i.to_s(+"foo")
。现在您可以明白为什么调用一元 + 函数而不是字符串连接运算符。
因此,您还有其他选项来修复代码:
i.to_s() +" #{base} " + i.to_s
or even
"#{i} #{base} #{i}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)