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.
signature.asc
Description: Message signed with OpenPGP using GPGMail
