http://qs321.pair.com?node_id=771356


in reply to Re: Creating accessors on the fly, or not...
in thread Creating accessors on the fly, or not...

And lastly, I would suggest replacing
has $accessor => ( is => 'ro' );
with the more MOPish
$self->meta->add_attribute($accessor, (is => 'ro'));

I'm curious—is there any actual difference (direct or indirect), or is it a matter of principle?

lodin

Replies are listed 'Best First'.
Re^3: Creating accessors on the fly, or not...
by stvn (Monsignor) on Jun 15, 2009 at 00:39 UTC

    No, there really is very little difference, they are basically equivalent. I guess is it a matter of principle, the declarative "sugar" is meant to be used during class definition time and the MOP is meant to be used at all other times.

    But, that all said, it might make more difference when we work out how to "compile" Moose classes (though I don't know this for sure) because part of that plan would involve caching the generated metaclass and then possibly turning the sugar keywords into noops (at least that was a path we explored in the early MooseX::Compile prototypes). So I guess if you really want to future proof things, it is best to use the MOP in this context. Hopefully by the end of YAPC::NA next week we will know more, it is one of the key topics on the Moose hackathon agenda.

    -stvn