I think it's because nil *is* pretty special--this is the equivalent of a NullPointerException or similar in other languages (even though in fact nil is an object like any other, it *is* usually a different type of *semantic* error on the part of the programmer than with any other class). UndefinedObject is also a pretty long class name, so it's nice to leave that out. But I would be all in favor of making it "nil did not understand #selector", to be more consistent but still concise. On Fri, Jun 27, 2025, 3:00â¯PM Aik-Siong Koh <askoh@askoh.com> wrote:
Why is UndefinedObject version of "did not understand" so different from others? It also inverts the object message paradigm. Thanks Aik-Siong Koh
description
"Returns a textual description of the exception (based on the message instance variable). If message is nil, it returns the defaultDescription instead."
message ifNil: [ ^ self defaultDescription ]. message lookupClass == UndefinedObject ifTrue: [ ^ message selector printString , ' was sent to nil' ].
^ 'Instance of ' , message lookupClass printString , ' did not understand ' , message selector printString