1

smalltalk のnilを object -cのように再定義したいと思います。nilが処理できないメッセージを受け取ると、nil返します。nilこれは単なるショートカットであることはわかっていますが、RubyUndefinedObjectのようなものがあるので、常にnilを返すように再定義できますか?method_missingUndefinedObject

4

3 に答える 3

11

探しているメソッドはdoesNotUnderstand:Smalltalk で呼び出されます。実際に実装できます:

UndefinedObject>>doesNotUnderstand: aMessage
    ^ nil

ただし、これはシステム全体に影響し、微妙な副作用があったり、システムの他の部分にバグが発生したりする可能性があることに注意してください。

UndefinedObjectまた、 はプリミティブ型ではなく、 から継承した通常のクラスであることに注意してくださいObject。そのためnil、すでに多数のメッセージを理解しており、Objective-C からの期待どおりに動作しない可能性があります。

于 2012-04-14T15:10:37.007 に答える
1

nil を変更しないように、#doesNotUnderstand: を実装する独自の Null シングルトン クラスを作成することを検討してください。スーパークラスを nil にします (Object と同様)。

必要に応じて、「^nil」ではなく「^Null インスタンス」などと答えてください。

Null instance badMethod  --> nil
于 2012-04-16T12:03:50.337 に答える
0

あなたがこのコードに取り組む唯一の人なら、私はそれに行くと言います。

一方、これが「あなた」の同義語ではない会社が所有する製品であり、他の誰かがいつかこれを維持しなければならない可能性がある場合は、これを行わないことを強くお勧めします. Smalltalk の中心にあるクラスを変更することは、つま先を吹き飛ばすための古典的な方法の 1 つです。(私はかつてこれをした男を知っていました.彼は幸せではなかった...そしてその後いつも少し足を引きずっていました.面白い昔のこと、人生...)。

共有してお楽しみください。

于 2012-04-18T17:06:06.680 に答える