Bisakah himpunan bagian diekspor dalam Raku?


9

Saya ingin mendefinisikan beberapa himpunan bagian yang saya juga menambahkan beberapa kendala dan beberapa diepernyataan 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;

1
Sebagai catatan, ada modul himpunan bagian umum yang mencakup PosInt: github.com/bradclawsie/Subsets-Common
user0721090601

Jawaban:


12

Subset memang bisa diekspor. Masalahnya di sini adalah bahwa is exportsifat tersebut tidak diterapkan dengan benar ke PosIntsubset (dan subset lain yang Anda mungkin juga ingin ekspor); sifat tersebut harus diterapkan segera setelah tipe baru didefinisikan dan tepat sebelum batasan apa pun diperkenalkan where. Dengan menerapkan sifat tersebut dengan benar:

unit module Long::Module::Subsets;

subset PosInt is export
where ($_ ~~ Int || "The value must be an integer")
   && ($_ > 0    || "The value must be greater than 0")
;

# other subsets ...

berikut ini akan berfungsi dengan baik:

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.