Mr.*_*ama 8 ruby operators syntax-error
我遇到了语法错误.我接受这是一个语法错误,但我有点好奇为什么它是一个语法错误.
这完全符合您的预期:
(0..9).each { |n| puts n.to_s + "^2 = " + (n**2).to_s }
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
(0..9).each { |n| puts n.to_s +"^2 = "+ (n**2).to_s }
Run Code Online (Sandbox Code Playgroud)
错误:
NoMethodError: undefined method '+@' for "^2 = ":String
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以在任何地方移动第二个加号,Ruby似乎没有任何问题,但如果第一个碰巧触及双引号,我会收到语法错误.
为什么会发生这种情况?
sep*_*p2k 12
n.to_s +"^2 = "被解析为n.to_s(+"^2 = "),语法上有效,意味着"对字符串执行一元加操作^2 =,然后将结果作为参数传递给to_s".但是,由于字符串没有一元加操作(由方法表示+@),因此得到NoMethodError(不是语法错误).
究其原因,它的解析这种方式而不是n.to_s() + "^2 = "是,如果它被解析这种方式则puts +5或puts -x也必须被解析为puts() + 5和puts() - x,而不是puts(+5)和puts(-x)-在这个例子这是相当明确的,后者是目的是什么.