2016-01-09 14 views
9

Trong một câu hỏi khác (How can I declare and use a Perl 6 module in the same file as the program?), tôi đã có mã như thế này:Tôi có thể kiểm tra mô-đun Perl 6 như thế nào?

module Foo { 
    sub foo (Int:D $number) is export { 
     say "In Foo"; 
     } 
    } 

foo(137); 

tôi muốn kiểm tra các mô-đun Foo để xem nếu nó được định nghĩa và những gì có thể ở trong đó để làm một chút về gỡ lỗi. Vì Foo là một mô-đun và không phải là một lớp, nên các phương thức meta có hợp lý không?

Ngoài ra, tôi nghĩ đó từng là một cách để có được một danh sách các phương pháp trong một lớp học. Tôi muốn nhận danh sách các chương trình con trong một mô-đun. Đó sẽ là một cách để kiểm tra rằng tôi đã định nghĩa đúng thứ và Perl 6 biết về chúng. Trong Perl 5 công cụ của tôi, tôi thường kiểm tra mà tôi đã xác định một chương trình con bởi vì tôi đã có một khoảng thời gian mà tôi muốn chọn một tên trong module và một tên hơi khác nhau trong các bài kiểm tra (như đêm qua, tôi đoán, với valid_valueis_value_value). Nếu tôi có thể kiểm tra rằng foo được định nghĩa, tôi có thể làm một chút về gỡ lỗi ở đây.

Trả lời

8

Bạn có thể nhận tại bảng biểu tượng một gói bằng cách thêm một trailing :: tên của nó. Điều này sẽ làm việc cho các module và các lớp học cả hai, nhưng trong trường hợp của các lớp học sẽ không bao gồm bất kỳ phương pháp, như những người có liên quan đến đối tượng loại và không phải là gói riêng của mình.

Bảng biểu tượng là loại Stash, đó là kết hợp (tức là hỗ trợ các hoạt động băm-loại tương tự):

module Foo { 
    sub foo is export { ... } 
    sub bar is export(:bar) { ... } 
    our sub baz { ... } 
} 

# inspect the symbol table 
say Foo::.WHAT;  #=> (Stash) 
say Foo::.keys;  #=> (EXPORT &baz) 
say Foo::<&baz>.WHAT; #=> (Sub) 

# figure out what's being exported 
say Foo::EXPORT::.keys;   #=> (bar DEFAULT ALL) 
say Foo::EXPORT::bar::.keys;  #=> (&bar) 
say Foo::EXPORT::DEFAULT::.keys; #=> (&foo) 
say Foo::EXPORT::ALL::.keys;  #=> (&bar &foo) 
Các vấn đề liên quan