字符串连接错误

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 +5puts -x也必须被解析为puts() + 5puts() - x,而不是puts(+5)puts(-x)-在这个例子这是相当明确的,后者是目的是什么.

  • 做得很好.我没有想到to_s将所有这些作为一个论点. (2认同)