สามารถส่งออกชุดย่อยใน Raku ได้หรือไม่


9

ฉันต้องการกำหนดชุดย่อยสองสามชุดที่ฉันเพิ่มข้อ จำกัด บางประการและdieคำสั่งบางอย่างสำหรับข้อความแสดงข้อผิดพลาดที่มีประโยชน์ ฉันไม่ต้องการกำหนดไว้ที่ด้านบนของโมดูลที่ใช้ชุดย่อยเหล่านั้นและต้องการวางไว้ในโมดูลอื่นในขณะที่ทำไปโดยใช้ชื่อที่ผ่านการรับรอง (FQNs) ตัวอย่างเช่นฉันมี

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

แต่ได้

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

ไม่ทำงานฉันคิดว่าฉันสามารถทำสิ่งต่าง ๆ ดังต่อไปนี้ แต่ฉันสงสัยว่าถ้าฉันสามารถหลีกเลี่ยงได้:

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
ในฐานะที่เป็นหมายเหตุด้านข้างมีโมดูลย่อยทั่วไปที่มี PosInt: github.com/bradclawsie/Subsets-Common
0721090601

คำตอบ:


12

สามารถส่งออกชุดย่อยได้อย่างแน่นอน ปัญหาที่นี่คือว่าis exportลักษณะไม่ได้ถูกนำไปใช้อย่างถูกต้องกับPosIntชุดย่อย (และส่วนย่อยอื่น ๆ ที่คุณอาจต้องการที่จะส่งออก) ลักษณะที่จะต้องนำไปใช้ทันทีหลังจากชนิดใหม่ที่ถูกกำหนดและขวาก่อน constrains ใด ๆ whereที่นำมาใช้กับ โดยใช้ลักษณะที่ถูกต้อง:

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

ต่อไปนี้ควรทำงานได้ดี:

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.