||
Ruby 1.8 不支持某些类型的重载(例如/ or
、&&
/ and
、!
/ not
、 )有两个很好的理由?:
:
- 如果不对语言进行非常广泛的更改,就无法使用 Ruby 中的方法实现短路语义。
- Ruby 被硬编码为仅在布尔上下文中视为 false
nil
。false
第一个原因不适用于!
/not
但第二个原因仍然适用。这不像您可以使用!
while &&
/||
仍然是硬编码来引入您自己的类布尔对象。对于其他用途,已经~
有&
/的互补运算符|
。
我可以想象有很多代码期望!obj
与obj ? false : true
, 和!!obj
-同义,obj ? true : false
我什至不确定代码应该如何处理在布尔上下文中评估为真但!
非假的对象。
看起来 Ruby 不打算引入对其他错误值的支持。Ruby stdlib 中似乎没有任何内容可以覆盖!
,所以我没有找到任何示例。
它有一些我想念的非常好的用途吗?