为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Ruby不支持i ++或i--(递增/递减运算符)?

/ 猿问

为什么Ruby不支持i ++或i--(递增/递减运算符)?

慕的地2183247 2019-07-26 17:13:43

为什么Ruby不支持i ++或i--(递增/递减运算符)?

前/后递增/递减运算符(++--)是非常标准的编程语言语法(至少对于过程语言和面向对象语言)。

为什么Ruby不支持它们?我知道你可以用+=和完成同样的事情-=,但是排除这样的东西似乎有点奇怪,特别是因为它是如此简洁和传统。

例:

i = 0    #=> 0i += 1   #=> 1i        #=> 1i++      #=> expect 2, but as far as I can tell, 
         #=> irb ignores the second + and waits for a second number to add to i

我理解Fixnum是不可改变的,但如果+=能够实现一个新的Fixnum并设置它,为什么不这样做++呢?

包含=角色的作业的一致性是唯一的原因,还是我错过了什么?


查看完整描述

3 回答

?
慕运维1137616

以下是Matz(Yukihiro Matsumoto)在一个旧线程中解释它的方法:

Hi,

In message "[ruby-talk:02706] X++?"
    on 00/05/10, Aleksi Niemelä <aleksi.niemela@cinnober.com> writes:

|I got an idea from http://www.pragprog.com:8080/rubyfaq/rubyfaq-5.html#ss5.3
|and thought to try. I didn't manage to make "auto(in|de)crement" working so
|could somebody help here? Does this contain some errors or is the idea
|wrong?

  (1) ++ and -- are NOT reserved operator in Ruby.

  (2) C's increment/decrement operators are in fact hidden assignment.
      They affect variables, not objects.  You cannot accomplish
      assignment via method.  Ruby uses +=/-= operator instead.

  (3) self cannot be a target of assignment.  In addition, altering
      the value of integer 1 might cause severe confusion throughout
      the program.


查看完整回答
反对 回复 2019-07-26
?
开满天机

一个原因是到目前为止,每个赋值运算符(即更改变量的运算符)都包含=在其中。如果添加++--,那情况就不一样了。

另一个原因是人们的行为++--经常混淆。i++例证:你的例子中的返回值实际上是1,而不是2(i然而,新值将是2)。


查看完整回答
反对 回复 2019-07-26
?
蛊毒传说

它在OO语言中并不常见。事实上,++Smalltalk中没有这种语言,它创造了“面向对象编程”这一术语(而Ruby语言受其影响最大)。你的意思是它在C语言和传统语言中非常模仿C.Ruby确实有一种类似C语言的语法,但它并不是坚持C语言传统的奴隶。

至于为什么它不在Ruby中:Matz不想要它。这才是真正的终极原因。

Smalltalk中没有这样的东西的原因是因为它是语言最重要的哲学的一部分,分配变量从根本上讲是一种不同于向对象发送消息的东西 - 它在不同的层面上。这种想法可能影响了Matz设计Ruby。

将它包含在Ruby中并不是不可能的 - 您可以轻松编写一个将所有内容++转换为的预处理器+=1。但显然Matz并不喜欢操作员做过“隐藏任务”的想法。拥有一个隐藏整数操作数的运算符也似乎有点奇怪。该语言中没有其他运算符以这种方式工作。


查看完整回答
反对 回复 2019-07-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信