Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

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

by mascip (Pilgrim)
on May 31, 2013 at 16:41 UTC ( #1036267=note: print w/ replies, xml ) Need Help??


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

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.


Comment on Re^8: a State machine with Roles - possible? (class or instance)
Replies are listed 'Best First'.
Re^9: a State machine with Roles - possible? (class or instance)
by LanX (Canon) on May 31, 2013 at 19:40 UTC
    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)

      Sorry, i didn't realize that the documentation was not clear enough (indeed). apply_all_roles() gives a meta to the instance. For example the class of my $door instance is an anonymous class called 'Moose::Meta::Class::__ANON__::SERIAL::16=HASH(0x9ac4b8)'. I have made tests: each door can be in a different state (i'm lazy to share these: while trying to unapply Roles on more complex examples, i have lost these tests)

      But i don't manage to unapply a Role, and i think there's a better way anyway (see message below)

        > Sorry, i didn't realize that the documentation was not clear enough (indeed).

        I'd rather say it's wrong. =)

        > apply_all_roles() gives a meta to the instance.

        I checked the code it indeed does, so the POD should better reflect this.

        But thanks it's much clearer now. =)

        Cheers Rolf

        ( addicted to the Perl Programming Language)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2015-07-28 04:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (252 votes), past polls