Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re^6: a State machine with Roles - possible? (class or instance)

by james2vegas (Chaplain)
on May 30, 2013 at 20:41 UTC ( #1036139=note: print w/replies, xml ) Need Help??

in reply to Re^5: a State machine with Roles - possible? (class or instance)
in thread a State machine with Roles - possible?

While it is true that only one class (package) is created for every unique combination of class and role to apply, that doesn't limit those objects to be singletons, they would each have their own state, shared with the roles applies to them.
  • Comment on Re^6: a State machine with Roles - possible? (class or instance)

Replies are listed 'Best First'.
Re^7: a State machine with Roles - possible? (class or instance)
by LanX (Cardinal) on May 30, 2013 at 23:13 UTC
    I'm not sure if you are getting my point.

    Let's say I want to model a house with 100 doors.

    The Ruby code allows to call 100 times new() from class "Door" to create 100 door objects with independent states, because the methods of the mixins belong to the objects.

    The shown Moose code OTOH needs 100 packages achieve this, cause all objects of such a package share the same roles. This doesn't sound very handy or scalable.

    And I couldn't see any code to generate such classes, hence we have to manually name them Door1, Door2, ...Door100.

    Plz correct me if I'm wrong.

    Cheers Rolf

    ( addicted to the Perl Programming Language)

  • UPDATE 01 Jun 2013

    oops, I just realized that you already explained the mechanism behind apply_all_roles further up this thread. Sorry, I wasn't aware we are talking about the same approach.

      I don't know how Ruby mixins works, and i'm not sure how Moose/Moo implement it exactly, but i know that it's possible to have each Door be in a different state. Because that is what apply_all_roles_to($object, @roles) is for: it does not apply to the whole class, but only to one object.

      I have no idea about the scalability. I think that Salva made a good point: if it gets that complicated, i'll probably want to re-think my design.

        Ahh OK I didn't check the documentation in Moose::Util ... =)

        apply_all_roles($applicant, @roles)

        This function applies one or more roles to the given $applicant The applicant can be a role name, class name, or object.

        The $applicant must already have a metaclass object.

        The list of @roles should a list of names or Moose::Meta::Role objects, each of which can be followed by an optional hash reference of options (-excludes and -alias).

        but couldn't find a description for metaclass either, I suppose a package container for roles.

        Just for a better understanding, where in your code did you assure that the $applicant already has a metaclass object?

        Cheers Rolf

        ( addicted to the Perl Programming Language)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1036139]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2020-10-24 18:40 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (246 votes). Check out past polls.