前/后递增/递减运算符(++
和--
)是非常标准的编程语言语法(至少对于过程语言和面向对象语言而言是如此)。
为什么Ruby不支持它们呢?我知道你可以用+=
和-=
来完成同样的事情,但是排除这样的东西似乎有些奇怪的武断,特别是因为它是如此简洁和传统。
示例:
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
并设置它,为什么不对++
执行同样的操作
是包含=
字符的赋值的一致性是造成这种情况的唯一原因,还是我遗漏了什么?
发布于 2010-09-08 00:37:12
以下是Matz(松本幸博)在一部旧thread中的解释
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.
发布于 2010-09-08 00:32:31
一个原因是到目前为止,每个赋值运算符(即更改变量的运算符)都有一个=
。如果添加++
和--
,情况就不同了。
另一个原因是++
和--
的行为经常让人感到困惑。例如:在您的示例中,i++
的返回值实际上应该是1,而不是2 (但是,i
的新值应该是2)。
发布于 2010-09-08 15:59:16
我认为还有另一个原因:Ruby语言中的++
不会像C语言及其直接后继者那样有用。
原因是,for
关键字:虽然它在C语言中是必不可少的,但在Ruby语言中却是多余的。Ruby语言中的大多数迭代都是通过可枚举的方法完成的,比如在迭代某些数据结构时使用each
和map
,当需要精确的循环次数时使用Fixnum#times
方法。
实际上,据我所知,大多数时候+=1
是由刚从C风格的语言迁移到Ruby语言的人使用的。
简而言之,如果使用++
和--
方法,那就真的很有问题了。
https://stackoverflow.com/questions/3660563
复制相似问题