> On Monday, September 2, 2002, at 03:44  AM, Damian Conway wrote:
> 
> >> my Date $date .= new('Jun 25, 20002');
> >
> > Hmmmm. That's a very interesting idea.
> > I like it.
> 
> Looks pretty groovy to me too.  It looks like the .=
> operator, no longer being employed as a string appender, 
> now means "use the class I just mentioned".  

Not quite.  .= means exactly what you'd expect it to mean, "call a method on
the object on the left and assign the result to the variable on the left".  So 

$date .= new('Jun 25, 2002');

means exactly the same as

$date = $date.new('Jun 25, 2002');

(I'd expect .= to be a valid operator anyway, so one could do $linked_list_item
..= next(), but that's beside the point).

The utility comes when $date.new() calls the (static) new function on the Date
class even if $date is undef.  (In essence, "my Date $date;" makes $date an
interesting value of undef, one that's not defined but has a .class() value).  

Of course, this doesn't do anything in particular for constructors.  We could
also call any static class function on that object.

> If so, perhaps it would only be a small step further for
> it to also mean "and if I don't give the name of the method,
> use new_from_[class of object being passed]". So, the following code
> would call Date::new_from_String, passing 'Sep 21, 1963' as the
> sole argument:
> 
>       my Date $date;
>       $date .= 'Sep 21, 1963';

The problem is that it's not just for static functions.  The point is that
"$date .= foo" would be exactly like "$date = $date.foo", and having an
implicit constructor seems really messed up.  I guess that would mean that I
could pass Date.'Sep 21, 1963' to anything expecting a Date object.  I think
that might be just slightly too magical for comfort.  I don't like the idea of
object types automagically converting themselves by context; that way madness
lies.  If you want "new" just call it.
-- 
Adam Lopresto ([EMAIL PROTECTED])
http://cec.wustl.edu/~adam/

Why does man kill?  He kills for food.  And not only food: frequently
there must be a beverage.
                -- Woody Allen, "Without Feathers"

Reply via email to