我想重新定义 smalltalk 的nil以像objective-c中的那样工作。因此,当nil收到无法处理的消息时,它会返回nil。现在我知道这nil
只是一个快捷方式,但是在RubyUndefinedObject
中是否有类似的东西,所以我可以重新定义它以始终返回nil?method_missing
UndefinedObject
问问题
1406 次
3 回答
11
您正在寻找的方法doesNotUnderstand:
在 Smalltalk 中被调用。您确实可以实现:
UndefinedObject>>doesNotUnderstand: aMessage
^ nil
但是,请记住,这会影响整个系统,并且可能会产生微妙的副作用或在系统的其他部分引入错误。
另请注意,UndefinedObject
它不是原始类型,而是继承自Object
. 因此nil
,已经理解了大量的消息,并且可能不会像您期望的来自 Objective-C 的那样表现。
于 2012-04-14T15:10:37.007 回答
1
考虑创建您自己的实现#doesNotUnderstand: 的 Null 单例类,这样您就不会修改 nil。将超类设为 nil(如 Object)。
在需要的情况下回答类似“^Null instance”而不是“^nil”的内容。
Null instance badMethod --> nil
于 2012-04-16T12:03:50.337 回答
0
如果你是唯一一个会处理这个代码的人,我说去吧。
另一方面,如果这是某个公司拥有的产品,它不是“您”的同义词,并且其他人可能在某些时候必须维护它,我强烈建议您不要这样做。在 Smalltalk 的核心修改类是让你大吃一惊的经典方法之一。(我曾经认识一个这样做的人。他不开心......之后总是一瘸一拐。有趣的老东西,生活......)。
分享和享受。
于 2012-04-18T17:06:06.680 回答