From: Jonathan Scott Duff <[EMAIL PROTECTED]> Date: Sat, 30 Sep 2006 17:23:54 -0500
On Sat, Sep 30, 2006 at 11:48:04AM -0700, Joshua Choi wrote: > How does automatic coercion work? [ deletia ] > 1. C<sum()> automatically coerces its C<Str> arguments into C<Num> > parameters because C<Str.does: Num>. Wouldn't it be better to do the coercion explicitly? E.g.: multi sum ( Str $addend1, Num $addend2 --> Num ) { sum 0+$addend1, $addend2 } multi sum ( Num $addend1, Str $addend2 --> Num ) { sum $addend1, 0+$addend2 } After all, there may be more than one way to do the coercion, especially for something more complicated than a number. > 2. C<say()> then automatically coerces its C<Num> arguments into > C<Str> parameters because C<Num.does: Str>. > > ...Or am I completely off the mark?) I hope you're way off the mark. Automatic coercion was one of the annoyances I remember from C++. Debugging becomes more difficult when you have to not only chase down things that are a Foo, but anything you've compiled that might know how to turn itself into a Foo. I tend to agree, FWIW. -- Bob Rogers http://rgrjr.dyndns.org/