Saya ingin mendefinisikan beberapa himpunan bagian yang saya juga menambahkan beberapa kendala dan beberapa die
pernyataan untuk beberapa pesan kesalahan yang berguna. Saya tidak ingin mendefinisikan mereka di bagian atas modul yang menggunakan himpunan bagian itu dan sebaliknya ingin menempatkan mereka di modul lain sambil juga menghilangkan menggunakan nama yang sepenuhnya memenuhi syarat (FQNs). Misalnya saya punya
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 ...
tapi berhasil
===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...
Itu tidak berfungsi, saya pikir saya bisa melakukan sesuatu sebagai berikut tetapi saya bertanya-tanya apakah saya bisa menghindari melakukannya:
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;
Jawaban:
Subset memang bisa diekspor. Masalahnya di sini adalah bahwa
is export
sifat tersebut tidak diterapkan dengan benar kePosInt
subset (dan subset lain yang Anda mungkin juga ingin ekspor); sifat tersebut harus diterapkan segera setelah tipe baru didefinisikan dan tepat sebelum batasan apa pun diperkenalkanwhere
. Dengan menerapkan sifat tersebut dengan benar:berikut ini akan berfungsi dengan baik:
sumber