Черты лося по типу союзов - PullRequest
0 голосов
/ 13 декабря 2011

В Moose v1.x я имел обыкновение делать это:

package Class;
use Test::More tests => 1;
use Moose;
use MooseX::Types::Moose qw/Undef Str/;

eval {
  has 'trait_boom' => (
    is => 'rw'
    , isa => Str | Undef
    , default => ''
    , traits => ['String']
  );
};

ok ( !$@, "Created attr trait_boom, a type union of Str and Undef\n$@" );

Однако он больше не работает с Moose 2.x.Я предполагаю, что это ошибка .Почему Moose нарушил обратную совместимость?Есть ли другой способ сделать эту работу?Я хочу, чтобы это было либо Undef, либо Str.Я не хочу приводить Undef к пустой строке, хотя.

Я спрашиваю только здесь, потому что очевидно, что магнит сломался

17:43 [perl2] -!- ERROR Closing Link: 64.200.109.13 (Banned)

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Как мы уже говорили вам в MagNet сразу после того, как я сообщил вам об уклонении от бана, это не ошибка.Методы этой черты никогда не должны были работать против значения Undef, поэтому допускать такое поведение в 1.x было ошибкой.У Moose есть способы, оптимизированные для правильного поведения, и он никогда не обещал совместимости ошибок между версиями

Вам нужно либо написать свои собственные черты, либо написать методы вручную, чтобы справиться с этой ситуацией.

2 голосов
/ 13 декабря 2011

Я думаю, это было изменено в Moose 2.0300, пятница, 23 сентября 2011 г .:

  • Методы ->is_subtype_of и ->is_a_type_of изменили свое поведение для союзных типов. Ранее они возвращали истину, если кто-либо из их членов типы возвращают истину для данного типа. Теперь все типы членов должны верните истину. RT # 67731 . (Дэйв Рольский)

Вы пробовали Maybe[Str] вместо Str | Undef?

...