有两个很好的理由,红宝石1.8不支持重载像某些种类||
/or
,&&
/and
,!
/not
,?:
:为什么Ruby 1.9允许覆盖! !=!〜?
- 短路语义不能在没有与Ruby的方法来实现语言的非常广泛的变化。
- Ruby被硬编码为仅在布尔上下文中将
nil
和false
视为false。
第一个原因不适用于!
/not
但第二个原因仍然存在。这不像是你可以使用!
来引入你自己的布尔类对象,而&&
/||
仍然是硬编码的。对于其他用途,已有互补运算符~
与&
/|
。
我能想象有很多的代码期待!obj
是同义与obj ? false : true
,并!!obj
与obj ? true : false
- 我甚至不确定代码应该如何应对计算结果为布尔值的背景下真正的对象,但!
到非虚假的东西。
它看起来不像Ruby计划引入对其他错误值的支持。 Ruby stdlib中没有任何内容似乎覆盖了!
,所以我没有找到任何示例。
它有一些真的很好用,我错过了吗?