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把所有这些都当作一个论点。