Используйте мета-атрибуты MooseX с Moops

Можно ли использовать мета-атрибуты MooseX с Moops?

Рассмотрим пример кода Moose:

use v5.14;
use strict;
use warnings;

package TraitTest;
use Moose;
with 'MooseX::Getopt';
has opt1 => (
    traits => ['Getopt'],
    is => 'ro',
    isa => 'Bool',
    cmd_aliases => ['o']
);
1;
package main;
print TraitTest->new_with_options()->opt1 ? "yes\n" : "no\n";

Я попытался преобразовать это в Moops следующим образом:

use v5.14;
use strict;
use warnings;

use Moops;
class TraitTest
with MooseX::Getopt
{

  has opt1 => (
#    metaclass => 'Getopt', # also not working
    traits => ['Getopt'],
    is => 'ro',
    isa => 'Bool',
    cmd_aliases => ['o']
  );
}
print TraitTest->new_with_options()->opt1 ? "yes\n" : "no\n";

1 ответ

Решение

Классы Moops поддерживаются Moo, а не Moose по умолчанию. Таким образом, расширения MooseX обычно не работают.

Тем не менее, вместо Moo можно использовать Moose:

class TraitTest with MooseX::Getopt using Moose {
    ...
}
Другие вопросы по тегам