我遇到了语法错误。我承认这是一个语法错误,但我有点好奇why这是一个语法错误。
这完全按照您的预期工作:
(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 =
然后将结果作为参数传递给to_s
"。但是,由于字符串没有一元加运算(由方法表示+@
),你会得到一个NoMethodError
(not语法错误)。
它以这种方式解析而不是这样解析的原因n.to_s() + "^2 = "
如果这样解析的话puts +5
or puts -x
也必须被解析为puts() + 5
and puts() - x
而不是puts(+5)
and puts(-x)
- 在这个例子中,很明显后者就是我们想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)