Je voudrais définir quelques sous-ensembles auxquels j'ajoute également quelques contraintes et quelques die
instructions pour certains messages d'erreur utiles. Je ne veux pas les définir en haut du module qui utilise ces sous-ensembles et je veux plutôt les placer dans un autre module tout en supprimant l'utilisation de leurs noms complets (FQN). Par exemple, j'ai
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 ...
mais j'ai
===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...
Cela ne fonctionnait pas, j'ai pensé que je pouvais faire quelque chose comme suit, mais je me demande si je pourrais éviter de le faire:
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;
Réponses:
Les sous-ensembles peuvent en effet être exportés. Le problème ici est que le
is export
trait n'est pas correctement appliqué auPosInt
sous - ensemble (et à tout autre sous-ensemble que vous auriez également souhaité exporter); le trait doit être appliqué immédiatement après la définition du nouveau type et juste avant toute contrainte introduite avecwhere
. En appliquant correctement le trait:les éléments suivants devraient fonctionner correctement:
la source