首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Ruby不支持i++或i--​(增量/减量运算符)?

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

Stack Overflow用户
提问于 2010-09-08 00:25:21
回答 5查看 39.8K关注 0票数 136

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

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

示例:

代码语言:javascript
复制
i = 0    #=> 0
i += 1   #=> 1
i        #=> 1
i++      #=> 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并设置它,为什么不对++执行同样的操作

是包含=字符的赋值的一致性是造成这种情况的唯一原因,还是我遗漏了什么?

EN

回答 5

Stack Overflow用户

发布于 2010-09-08 00:37:12

以下是Matz(松本幸博)在一部旧thread中的解释

代码语言:javascript
复制
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.

                            matz.
票数 101
EN

Stack Overflow用户

发布于 2010-09-08 00:32:31

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

另一个原因是++--的行为经常让人感到困惑。例如:在您的示例中,i++的返回值实际上应该是1,而不是2 (但是,i的新值应该是2)。

票数 30
EN

Stack Overflow用户

发布于 2010-09-08 15:59:16

我认为还有另一个原因:Ruby语言中的++不会像C语言及其直接后继者那样有用。

原因是,for关键字:虽然它在C语言中是必不可少的,但在Ruby语言中却是多余的。Ruby语言中的大多数迭代都是通过可枚举的方法完成的,比如在迭代某些数据结构时使用eachmap,当需要精确的循环次数时使用Fixnum#times方法。

实际上,据我所知,大多数时候+=1是由刚从C风格的语言迁移到Ruby语言的人使用的。

简而言之,如果使用++--方法,那就真的很有问题了。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3660563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档