Ruby中没有增量运算符(++)?

Ski*_*zit 203 ruby operators

可能重复:
为什么Ruby不支持i ++或i- for fixnum?

为什么Ruby中没有增量运算符?

例如

i++
++i
Run Code Online (Sandbox Code Playgroud)

++操作员是否用于其他事情?这有真正的原因吗?

Dav*_*ave 238

Ruby没有前/后递增/递减运算符.例如,x++x--将无法解析.更重要的是,++x或者--x什么都不做!事实上,它们表现为多个一元前缀运算符:-x == ---x == -----x == ......要增加数字,只需写入x += 1.

摘自"Ruby应该知道的新事物"(存档,镜像)

这解释得比我更好.

编辑:和语言作者本人的原因(来源):

  1. ++和 - 不是Ruby中的保留运算符.
  2. C的递增/递减运算符实际上是隐藏的赋值.它们影响变量,而不是对象.您无法通过方法完成任务.Ruby使用+ =/ - =运算符.
  3. 自我不能成为任务的目标.此外,更改整数1的值可能会导致整个程序严重混淆.

  • 我觉得自己认为1 ++意味着我们不应该使用++运算符表明1 + = 1同样很糟糕,因此我们不应该+ =,但我们这样做.所以必须有一个更深层次的原因,Matz没有包含它.也许实现这个所需的语法糖搞砸了解析器的另一部分?Dunno,但它*不能*只是对文字的自我赋值是无效的b/c Ruby中的许多其他东西阻止分配文字就好了. (11认同)
  • 关于第3点,因为大多数东西都是对象,想象一下Ruby是否允许你这样做:`1 ++ 1 + 2#不会是3! (5认同)
  • 它对于这个问题是有效的,但我希望"Ruby的新手应该知道的事情." 更新以反映Ruby 1.9. (4认同)

mik*_*kej 27

来自Matz帖子:

(1)++和 - 不是Ruby中的保留运算符.

(2)C的递增/递减运算符实际上是隐藏赋值.它们影响变量,而不是对象.您无法通过方法完成任务.Ruby使用+ =/ - =运算符.

(3)自我不能成为任务的目标.此外,更改整数1的值可能会导致整个程序严重混淆.

                      matz.
Run Code Online (Sandbox Code Playgroud)

  • @Donal,如果你的意思是,他们是否可以追溯性地添加到语言而不会破坏事物然后我认为他们不能.`x = a ++ b`解析为`x = a +(+ b)`所以如果我们只有`x ++`那么Ruby期望另一个操作数.这就是为什么当你尝试使用`++`时,你会倾向于得到语法错误,因为Ruby将下一个语句的一部分作为操作数.`+ =`在接收器上调用`+`实现,将RHS作为参数传递,然后将`+`返回的值赋给变量. (2认同)
  • @Donal Fellows:变量不是 Ruby 中的对象。 (2认同)
  • @Donal Fellows:但是变量不是 Ruby 中的对象,这就是为什么后增量不能作为变量对象的方法来实现。 (2认同)
  • @danielricecodes:不。Ruby 中很多东西都不是对象。变量就是其中之一。变量引用对象,但它们不是对象。 (2认同)