Hi Nicolai,

> On Jul 26, 2016, at 6:33 AM, Nicolai Hess <[email protected]> wrote:
> 
> 
> 
> 2016-07-26 15:08 GMT+02:00 Denis Kudriashov <[email protected]>:
>> Hi.
>> 
>> Look at UndefinedObject instance side methods. You will see class hierarchy 
>> protocol. For example nil understands #subclasses message:
>> 
>> nil subclasses "==> {ProtoObject}"
> 
> ProtoObjects superclass is nil, so maybe it just should behave the same way 
> for all other objects.
> 
> ByteString superclass subclasses includes: ByteString. "true"
> 
> ProtoObject superclass subclasses includes: ProtoObject. "true"

Sorry to sound harsh but that's no sense.  ProtoObject doesn't have a 
superclass.  This is indicated by ProtoObject superclass answering nil, where 
nil is the object that represents being undefined.

It is (as Denis points out) a bug, showing some confusion, to try and program 
around this one case by adding class protocol to the  undefined object.  A 
horrible hack.

Denis, you're right; that behaviour should be deleted.

>  
>> 
>> It implemented like this:
>> 
>> UndefinedObject >>subclassesDo: aBlock
>>      "Evaluate aBlock with all subclasses of nil.  Others are not direct 
>> subclasses of Class."
>> 
>>      ^ Class subclassesDo: [:cl | 
>>                      cl isMeta ifTrue: [aBlock value: cl soleInstance]].
>> 
>> 
>> So my question is: why it needs to be like that? And does it really needed?
>> 
>> I removed all this methods and not saw any problem. 
> 

Reply via email to