Gostaria de definir alguns subconjuntos aos quais também estou adicionando algumas restrições e algumas die
instruções para algumas mensagens de erro úteis. Não quero defini-los na parte superior do módulo que usa esses subconjuntos e, em vez disso, quero colocá-los em outro módulo, além de acabar com o uso de seus nomes totalmente qualificados (FQNs). Por exemplo, eu tenho
unit module Long::Module::Subsets;
subset PosInt
where ($_ ~~ Int || "The value must be an integer")
&& ($_ > 0 || "The value must be greater than 0")
is export
;
# other subsets ...
mas tenho
===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...
Isso não funcionou, imaginei que poderia fazer algo da seguinte maneira, mas estou me perguntando se poderia evitar:
use Long::Module::Subsets;
unit Long::Module;
my constant PosInt = Long::Module::Subsets::PosInt;
my constant Byte = Long::Module::Subsets::Byte;
# ... more subsets here
# ... some code here
my PosInt $age;
Respostas:
Subconjuntos podem realmente ser exportados. O problema aqui é que a
is export
característica não é aplicada corretamente aoPosInt
subconjunto (e a qualquer outro subconjunto que você também deseje exportar); a característica deve ser aplicada imediatamente após a definição do novo tipo e logo antes de qualquer restrição introduzidawhere
. Aplicando a característica corretamente:o seguinte deve funcionar bem:
fonte