Étant donné que les rôles Fooable et Barable ont tous deux été définis, comment puis-je dire que la classe FooBar fait Fooable et Barable? Je n'ai aucun problème en disantComment déclarer qu'une classe utilise plus d'un rôle avec 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;
Mais lorsque je tente d'ajouter
class FooBar with Fooable, Barable {}
Je reçois moins que l'erreur utile
expected option name at [path to MooseX/Declare/Syntax/NamespaceHandling.pm] line 45
Juste pour me prouver que je ne suis pas fou, Je l'ai réécrit en utilisant Moose. Ce code fonctionne (mais est plus laid que le péché):
#!/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;
Oui, la documentation indique 'avec (@roles)'. Ma seule question aurait été sur le barewords dans une liste. –
Quels documents utilisez-vous? Les docs MooseX :: Declare disent 'class Foo avec Role {...}'. Les docs de Moose disent 'avec (@roles)', mais alors tous les exemples sont comme 'avec 'Breakable';' –