Dato che i ruoli Fooable e Barable sono stati entrambi definiti, come posso dire che la classe FooBar fa Fooable e Barable? Non ho alcun problema a direCome si dichiara che una classe utilizza più di un ruolo con MooseX :: Declare?
#!/usr/bin/perl
use MooseX::Declare;
role Fooable {
method foo { print "foo\n" }
}
role Barable {
method bar { print "bar\n" }
}
class Foo with Fooable {}
class Bar with Barable {}
package main;
use strict;
use warnings;
Foo->new->foo;
Bar->new->bar;
Ma quando provo ad aggiungere
class FooBar with Fooable, Barable {}
ottengo il meno utile errore
expected option name at [path to MooseX/Declare/Syntax/NamespaceHandling.pm] line 45
Giusto per dimostrare a me stesso che non mi fa impazzire, L'ho riscritto usando Moose. Questo codice funziona (ma è più brutto di peccato):
#!/usr/bin/perl
package Fooable;
use Moose::Role;
sub foo { print "foo\n" }
package Barable;
use Moose::Role;
sub bar { print "bar\n" }
package Foo;
use Moose;
with "Fooable";
package Bar;
use Moose;
with "Barable";
package FooBar;
use Moose;
with "Fooable", "Barable";
package main;
use strict;
use warnings;
Foo->new->foo;
Bar->new->bar;
FooBar->new->foo;
FooBar->new->bar;
Sì, la documentazione dice 'con (@roles)'. La mia unica domanda sarebbe stata sulle bareword in una lista. –
Che documenti stai usando? I documenti MooseX :: Declare dicono 'classe Foo con ruolo {...}'. I documenti Moose dicono 'con (@roles)', ma poi tutti gli esempi sono come 'con 'Breakable';' –