为什么会抛出语法错误?我希望它是另一种方式......
>> 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风格的++运算符的想法?扔掉那本书.
Jer*_*emy 11
Ruby不支持这种语法.请i+=1改用.
正如@Dylan所说,Ruby正在阅读你的代码foo + (+(+(+(+foo)))).基本上它正在读取所有+符号(在第一个之后)作为标记整数正数.