我在irb中获得了bizzare输出
>> [1, 2] + + [3]
NoMethodError: undefined method `+@' for [3]:Array
from (irb):2
from /home/marko/.rubies/ruby-2.3.1/bin/irb:11:in `<main>'
>> [1, 2] ++ [3]
NoMethodError: undefined method `+@' for [3]:Array
from (irb):3
from /home/marko/.rubies/ruby-2.3.1/bin/irb:11:in `<main>'
>>
这是故意发生还是错误?
将+ +
转换为+@
答案 0 :(得分:9)
它没有将+ +
转换为+@
,而是将后者+
转换为+@
,即前缀+
运算符。因此,表达式的解析与[1, 2] + (+[3])
相同。
(+@
用于表示一元加运算符,因为+
是为二元加运算符保留的。)
(另外,Ruby中没有++
运算符。)
答案 1 :(得分:3)
我相信这被解析为:
[1, 2] + +[3]
错误是Ruby告诉我们没有正数组的概念。
你可以用整数看到这个。例如:
1++2 # => 3
# parsed as 1 + +2
# (obviously this is a particularly bad way to write this expression - don't do it!)
答案 2 :(得分:0)
根据这个答案No increment operator (++) in Ruby? Ruby没有增量运算符,所以最好将+ +
解释为两个独立的运算符,从而导致意外行为。如
++和 - 在Ruby中不是保留的运算符[s]
在尝试此操作时,Ruby gem或其他包含的库可能会导致其他意外行为。另外值得注意的是++
或+ +
,在非白空间敏感语言(如Ruby)中功能相同的事情将无法解析{{1}的任何可能的单独操作运营商。
简而言之: Ruby 不会将+
解释为+ +
,它只会将其解释为两个独立的+@
运算符。