On May 14, 2009, at 8:22 AM, Russel Winder wrote:

On Thu, 2009-05-14 at 08:10 +0200, Hans Dockter wrote:
[ . . . ]
a list, etc.  Used in that context it is idiomatic.  Used simply to
replace a call of a method that doesn't have inserter semantics, it is
probably a bad thing to do.

Could you explain a bit more what you mean with the last sentence?

The analogy is basically that << should never replace assignment or a
named action other than append if it is to be being used idiomatically.
So

       x = [ ]
       x << a

is fine since the semantics are inserter semantics, the value a is being
appended to x; << replaced append:

       x.append ( a )

If << simply replaces a non appending method call then it is being used
outside its idiomatic meaning and so will lead to misreading of
programs.

doFirst and doLast are appending methods, they append new actions to the
hook.  So << has a natural position somewhere here.  The question is
whether it should replace doFirst or doLast.  The problem is that it
cannot be used with both, it can only be used with one. The doubt leads
to a cogent argument that perhaps it shouldn't be used with either.

Ambiguity leads to ambivalence :-(

Thanks for the explanation. Regarding your last point and ambiguity. You could say the same about << operator for lists. Lists have a couple of methods to get stuff into them (e.g. add(Object) and add(index, Object)). But the << operator picks the most common one. We do the same.

- Hans

--
Hans Dockter
Gradle Project lead
http://www.gradle.org





---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to