Ruby 字符串连接错误

Ruby 字符串连接错误,ruby,operators,syntax-error,Ruby,Operators,Syntax Error,我遇到了语法错误。我承认这是一个语法错误,但我有点好奇为什么它是一个语法错误 这完全符合您的预期: (0..9).each { |n| puts n.to_s + "^2 = " + (n**2).to_s } 这会引发一个错误: (0..9).each { |n| puts n.to_s +"^2 = "+ (n**2).to_s } 错误: NoMethodError: undefined method '+@' for "^2 = ":String 奇怪的是,我可以将第二个加号移动到

我遇到了语法错误。我承认这是一个语法错误,但我有点好奇为什么它是一个语法错误

这完全符合您的预期:

(0..9).each { |n| puts n.to_s + "^2 = " + (n**2).to_s }
这会引发一个错误:

(0..9).each { |n| puts n.to_s +"^2 = "+ (n**2).to_s }
错误:

NoMethodError: undefined method '+@' for "^2 = ":String
奇怪的是,我可以将第二个加号移动到任何地方,Ruby似乎对此没有问题,但是如果第一个加号碰巧碰到双引号,我就会得到一个语法错误

为什么会发生这种情况?

n.to_s+“^2=”
被解析为
n.to_s(+“^2=”)
,这在语法上是有效的,意味着“对字符串
^2=
执行一元加号运算,然后将结果作为参数传递给
”。但是,由于字符串没有一元加号运算(由方法
+@
表示),因此会得到
NoMethodError
(不是语法错误)


它以这种方式解析,而不是作为
n.to_()+“^2=“
的原因是,如果它以这种方式解析,那么
put+5
put-x
也必须被解析为
put()+5
put()-x
,而不是
put(+5)
put(-x)
-在这个例子中,很明显后者就是我们想要的。

当你做
的时候,似乎是这样的。
+“
认为
+”
是一个参数。试着做
.to_s()+“
,效果很好。不是答案,而是一个线索:)做得很好。我没有想到to_s把所有这些都当作一个论点。