在smalltalk中重新定义nil以响应任何消息

Uko*_*Uko 1 null smalltalk pharo method-missing

我想重新定义smalltalk的nil,就像在objective-c中那样工作.因此,当nil收到无法处理的消息时,它返回nil.现在我知道这nil只是一个快捷方式,UndefinedObject但有没有像Ruby这样的东西method_missing,所以我可以重新定义它以便总是返回nilUndefinedObject

Luk*_*gli 11

您正在寻找的方法doesNotUnderstand:在Smalltalk中调用.你确实可以实现:

UndefinedObject>>doesNotUnderstand: aMessage
    ^ nil
Run Code Online (Sandbox Code Playgroud)

但是,请记住,这会影响整个系统,并可能产生微妙的副作用或在系统的其他部分引入错误.

另请注意,UndefinedObject它不是原始类型,而是继承自的普通类Object.因此,nil已经了解了大量消息,并且可能不像您期望的那样来自Objective-C.