On Mon, Apr 19, 2004 at 01:02:36PM -0500, Jonathan Scott Duff wrote: : Quoting A12... : > Note that an attribute declaration of the form : > : > has Tail $wagger .= new(...) : > : > might not do what you want done when you want it done, if what you : > want done is to create a new Dog object each time an object is built. : > For that you'd have to say: : > : > has Tail $wagger = { .new(...) } : > : > or equivalently, : > : > has Tail $wagger will build { .new(...) } : : Since $wagger is meant to be an object attribute, shouldn't it have a : dot? And is omitting the dot an error? : : has Tail $.wagger = { .new(...) } # right?
Yes, and yes. : Also, based on the earlier assertion that closure valued attributes : get the attribute as the topic, shouldn't the text say "to create a : new Tail object" rather than "Dog"? i.e., : : has Tail $.wagger = { .new(...) } # is the same as : has Tail $.wagger = { $.wagger.new(...) } : : which does some appropriate magic to call Tail.new because $.wagger : hasn't been initialized yet. Or is Tail also a Dog somehow? What happens : if the attribute is untyped? Presumably that's an error. Yes, it should have said "Tail". Larry