【问题标题】:Ruby Parenthesis syntax exception with i++ ++ii++ ++i 的 Ruby 括号语法异常
【发布时间】:2011-09-24 11:07:45
【问题描述】:

为什么这会引发语法错误?我希望它是相反的方式......

>> 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 ')'   

在使用 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

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

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

【问题讨论】:

标签: ruby syntax-error


【解决方案1】:

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

正如@Dylan 提到的,Ruby 将您的代码读取为foo + (+(+(+(+foo))))。基本上它读取所有+ 符号(在第一个符号之后)将整数标记为正数。

【讨论】:

  • @Simon:它认为你的意思是foo + (+(+(+(+foo))))(基本上将一个正号应用到第二个foo 四次并将其添加到第一个foo)。 Ruby 不支持foo++++foo
【解决方案2】:

Ruby 没有++ 运算符。在您的示例中,它只是添加了第二个 foo,即“消耗”一个加号,并将其他的视为一元 + 运算符。

【讨论】:

    【解决方案3】:

    Ruby 中没有 ++ 运算符。 Ruby 将您的 foo++ + ++foo第一个 加号作为二元加法运算符,其余作为第二个 foo 的一元正运算符。

    所以你要求 Ruby 加 5 和(加加加加)5,即 5,因此结果为 10。

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

    您从哪里得知 Ruby 一开始就支持 C 风格的 ++ 运算符?把那本书扔掉。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2023-04-06
      • 2021-05-17
      • 2011-10-01
      • 2011-09-22
      • 2016-03-18
      • 2016-11-26
      • 2013-01-07
      • 2011-12-29
      相关资源
      最近更新 更多