使用i ++ ++ i的Ruby Parenthesis语法异常

Sim*_*ker 2 ruby syntax-error

为什么会抛出语法错误?我希望它是另一种方式......

>> foo = 5
>> foo = foo++ + ++foo                                                  
=> 10 // also I would expect 12...                                                                   
>> foo = (foo++) + (++foo)                                              
SyntaxError: <main>:74: syntax error, unexpected ')'                    
      foo = (foo++) + (++foo)                                           
                   ^                                                    
<main>:75: syntax error, unexpected keyword_end, expecting ')'   
Run Code Online (Sandbox Code Playgroud)

尝试使用Ruby 1.9.2的tryruby.org.


在C#(.NET 3.5)中,这可以正常工作,并产生另一个结果:

var num = 5;
var foo = num;
foo = (foo++) + (++foo);
System.Diagnostics.Debug.WriteLine(foo); // 12
Run Code Online (Sandbox Code Playgroud)

我想这是运营商优先权的问题?谁能解释一下?

为了完整性...
C返回10
Java返回12

kin*_*all 12

++Ruby中没有运算符.红宝石把你foo++ + ++foo和采取第一的那些加号作为二进制加法运算,其余为第二一元正算foo.

因此,您要求Ruby添加5和(加上加上加)5,即5,因此结果为10.

当您添加括号时,Ruby在第一个右括号之前寻找第二个操作数(用于二进制加法),并因为找不到它而抱怨.

你是从哪里得到Ruby开始支持C风格的++运算符的想法?扔掉那本书.

  • 没有书,我只是假设并想知道结果:) (2认同)

Jer*_*emy 11

Ruby不支持这种语法.请i+=1改用.

正如@Dylan所说,Ruby正在阅读你的代码foo + (+(+(+(+foo)))).基本上它正在读取所有+符号(在第一个之后)作为标记整数正数.


J-_*_*_-L 6

Ruby没有++运算符.在你的例子中,它只是添加第二个foo,"消耗"一个加号,并将其他的视为一元+运算符.