Rakulara alt kümeler dışa aktarılabilir mi?


9

Ben de bazı kısıtlamalar ve diebazı yararlı hata mesajları için bazı ifadeler ekliyorum birkaç alt kümeleri tanımlamak istiyorum . Onları bu alt kümeleri kullanan modülün üstünde tanımlamak istemiyorum ve bunun yerine tam olarak nitelendirilmiş adlarını (FQN) kullanarak bunları yaparken başka bir modüle yerleştirmek istiyorum. Mesela bende

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 ...

ama var

===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...

Bu çalışma yerine bunun yerine aşağıdaki gibi bir şey yapabileceğini düşündüm ama bunu yapmaktan kaçınabilseydim merak ediyorum:

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
Bir yan not olarak, PosInt'i içeren ortak bir alt küme modülü vardır: github.com/bradclawsie/Subsets-Common
user0721090601

Yanıtlar:


12

Altkümeler gerçekten dışa aktarılabilir. Buradaki sorun, is exportözelliğin PosIntalt kümeye (ve dışa aktarmak istediğiniz herhangi bir alt kümeye) doğru şekilde uygulanmamış olmasıdır ; özellik, yeni tür tanımlandıktan hemen sonra ve herhangi bir kısıtlamanın getirilmesinden hemen önce uygulanmalıdır where. Özelliği doğru uygulayarak:

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 ...

aşağıdakiler iyi çalışmalıdır:

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.