On 2013-08-26, at 11:46, Norbert Hartl <[email protected]> wrote:

> 
> Am 26.08.2013 um 10:56 schrieb Esteban Lorenzano <[email protected]>:
> 
>> 
>> On Aug 25, 2013, at 9:40 AM, Camille Teruel <[email protected]> wrote:
>> 
>>> 
>>> On 24 août 2013, at 19:20, Camillo Bruni wrote:
>>> 
>>>> We have now:
>>>> 
>>>> String >> #asClass
>>>> String >> #asClassIfAbsent:
>>>> String >> #asClassIfPresent:
>>> 
>>> I don't understand why we need this new way.
>>> Is it just to avoid calling 'Smalltalk globals at: #MyClass'?
>> 
>> exactly
>> 
>>> Because these names are confusing, and the 'as' prefix suggests a 
>>> conversion while it's an access (with indirection but still a mere access).
>>> And #asClass has no sender.
>>> If you think 'Smalltalk globals at: #MyClass' is really too long to type, 
>>> lets just create a new global ThisEnvironment := Smalltalk globals.
>> 
>> this was already discussed. With #asClass and relatives what you have is a 
>> better abstraction jut because you are decoupled of "Smalltalk globals", it 
>> is not a big win now, but it open doors to better designs with environments, 
>> etc. 
>> At least, that was my understanding when the issue arise at the beginning.
>> 
> I just find it strange that an as* selector might _not_ return anything 
> needing a #asClassIfAbsent: selector. While I'm understanding the intention 
> it does not fit in my had. To me it worsens the understanding of as* 
> conversion selectors. 


It works the same way as the dictionary protocol with #at:
`#adsfasdf asClass` will signal an error, hence for compatibility you have the 
*IfAbsent: protocols. Otherwise you simply cannot replace all the users of 
`Smalltalk at:` and `Smalltalk globals at:` which is the long term goal.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to