除了用一元减号做一个很好的对称性之外,为什么在Numeric
类上定义一元加号运算符?它是否有一些实用价值,除了会引起混乱,允许编写类似的东西++i
(与大多数非 Ruby 主义者不同,不会增加i
)。
我可以想到在自定义类上定义一元加号可能很有用的场景(例如,如果您正在创建一些性感的 DSL),因此能够定义它是可以的,但为什么它已经在 Ruby 数字上定义了呢?
除了用一元减号做一个很好的对称性之外,为什么在Numeric
类上定义一元加号运算符?它是否有一些实用价值,除了会引起混乱,允许编写类似的东西++i
(与大多数非 Ruby 主义者不同,不会增加i
)。
我可以想到在自定义类上定义一元加号可能很有用的场景(例如,如果您正在创建一些性感的 DSL),因此能够定义它是可以的,但为什么它已经在 Ruby 数字上定义了呢?
也许这只是与其他编程语言的一致性问题,并反映一元减号。
在The Ruby Programming Language(由设计 Ruby 的 Yukihiro Matsumoto 编写)中找到了对此的支持:
一元加号是允许的,但它对数字操作数没有影响——它只是返回其操作数的值。它是为了与一元减号对称而提供的,当然可以重新定义。
如文档中所述,如果字符串被冻结,一元加号运算符将返回一个可变字符串。
我看到的一个可能原因是明确声明一个数字是正数(即使默认情况下它是正数)。
ruby-1.9.2-p136 :051 > +3
=> 3
ruby-1.9.2-p136 :052 > 3
=> 3