Tôi đã chơi xung quanh với một thực hiện Perl 6 của một chương trình dòng lệnh có nhiều công tắc. Chữ ký cho MAIN
là khá tham gia và một chút lộn xộn. Tôi tự hỏi nếu có một cách để xác định chữ ký ở một nơi khác và nói với các chương trình con gì để sử dụng:Tôi có thể sử dụng Chữ ký độc lập làm chữ ký trong Perl 6 không?
# possibly big and messy signature
my $sig;
BEGIN { $sig = :(Int $n, Int $m) };
multi MAIN ($sig) {
put "Got $n and $m";
}
MAIN
không thấy các biến trong chữ ký mặc dù chữ ký được thiết lập trước khi MAIN
biên dịch:
===SORRY!=== Error while compiling /Users/brian/Desktop/signature.p6
Variable '$n' is not declared
at /Users/brian/Desktop/signature.p6:7
Tôi nhận thấy loại điều này có thể hữu ích để tạo phương thức sau khi biên dịch và chọn chữ ký dựa trên các yếu tố khác nhau.
Dù là trong '(...)' là chữ ký, vì vậy sẽ không bao giờ hoạt động. Cách bạn sẽ làm điều này sẽ là cấp thấp và thực hiện cụ thể. Tôi sẽ cố gắng làm điều này để có chữ ký chung và thay đổi chữ ký sau khi được phân tích cú pháp. Đó là bỏ qua rigamarole để thay đổi điều phối đa. –
Để các biến bên trong hàm không vứt lỗi "biến không khai báo", điều này sẽ phải được thực hiện tại thời gian biên dịch bằng một thứ như macro. Thật không may, chức năng macro/slang đã được lên kế hoạch cho Perl 6, chưa được mô tả. – smls
Trên một lưu ý phụ: Bạn có thể khai báo biến trong phạm vi cấp cao nhất và khởi tạo biến trong thời gian BEGIN trong một tuyên bố, bằng cách sử dụng biểu mẫu chặn ít hơn của công cụ BEGIN phaser: 'BEGIN my $ foo = ...;' – smls