On 7 October 2011 11:16, Frank Shearar <[email protected]> wrote:
> On 7 October 2011 08:42, Lukas Renggli <[email protected]> wrote:
>>> I do not understand why classVariables cannot shadow globals and take 
>>> precedence over them.
>>> When I define a classVariable the resolution should take classVariable over 
>>> global.
>>
>> Any kind of shadowing is disallowed in Smalltalk.
>>
>> I think this is part of the language design is quite broken and a
>> rather static approach that is very strange in a dynamic language like
>> Smalltalk. Not even Java has these kind of static restrictions.
>>
>>> Now what will happen if I define classVariable with a name that is ok in my 
>>> current image but will be present
>>> in the future in the image I will load my code!
>>
>> Yes, this is the current semantics. The possibility to shadow globals
>> would be very useful to  replace globals in the context of a class
>> hierarchy. I suggested already many years ago to replace all shadowing
>> errors on all levels (temps, arguments, inst vars, class vars, pool
>> vars, globals) with compiler warnings.
>
> I must be missing something. I thought Stéphane was talking about something 
> like
>
> Object subclass: #Foo
>        instanceVariableNames: ''
>        classVariableNames: 'OrderedCollection'
>        poolDictionaries: ''
>        category: 'BalloonTests-Fills'
>
> bar
>        OrderedCollection := Array.
>        (OrderedCollection with: 1) add: 1
>
> but "Foo new bar" raises the expected "Error: This message is not
> appropriate for this object".
>
> What am I missing?

everything is ok: an #add message is not appropriate for Array.

>
> frank
>
>> Lukas
>>
>> --
>> Lukas Renggli
>> www.lukas-renggli.ch
>>
>>
>
>



-- 
Best regards,
Igor Stasenko.

Reply via email to