Các tập con có thể được xuất trong Raku?


9

Tôi muốn xác định một vài tập hợp con mà tôi cũng đang thêm một vài ràng buộc và một số diecâu lệnh cho một số thông báo lỗi hữu ích. Tôi không muốn định nghĩa chúng ở đầu mô-đun sử dụng các tập hợp con đó và thay vào đó muốn đặt chúng vào một mô-đun khác trong khi sử dụng tên đầy đủ (FQN) của chúng. Chẳng hạn, tôi có

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

nhưng có

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

Điều đó không hiệu quả Tôi nghĩ rằng tôi có thể làm điều gì đó như sau nhưng tôi tự hỏi Nếu tôi có thể tránh làm điều đó:

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
Là một lưu ý phụ, có một mô-đun con phổ biến bao gồm PosInt: github.com/bradclawsie/Subets-Common
user0721090601

Câu trả lời:


12

Các tập con thực sự có thể được xuất khẩu. Vấn đề ở đây là is exportđặc điểm này không được áp dụng đúng cho PosInttập hợp con (và bất kỳ tập hợp con nào khác mà bạn cũng có thể muốn xuất); đặc điểm phải được áp dụng ngay lập tức sau khi loại mới được xác định và đúng trước bất kỳ ràng buộc nào được đưa ra where. Bằng cách áp dụng các đặc điểm chính xác:

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

Những điều sau đây sẽ hoạt động tốt:

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.