Ich möchte einige Teilmengen definieren, zu denen ich auch einige Einschränkungen und einige die
Anweisungen für einige nützliche Fehlermeldungen hinzufüge . Ich möchte sie nicht oben im Modul definieren, das diese Teilmengen verwendet, sondern sie in einem anderen Modul platzieren und gleichzeitig die Verwendung ihrer vollqualifizierten Namen (FQNs) vermeiden. Zum Beispiel habe ich
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 ...
aber bekam
===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...
Das funktioniert nicht Ich dachte, ich könnte stattdessen etwas wie folgt tun, aber ich frage mich, ob ich es vermeiden könnte:
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;
Antworten:
Teilmengen können tatsächlich exportiert werden. Das Problem hierbei ist, dass das
is export
Merkmal nicht ordnungsgemäß auf diePosInt
Teilmenge angewendet wird (und auf jede andere Teilmenge, die Sie möglicherweise auch exportieren möchten). Das Merkmal muss unmittelbar nach der Definition des neuen Typs und unmittelbar vor den mit eingeführten Einschränkungen angewendet werdenwhere
. Durch korrektes Anwenden des Merkmals:Folgendes sollte gut funktionieren:
quelle