2016-08-04 20 views
5

Làm cách nào để triển khai các chức năng có cờ tùy chọn trong Perl6? Ví dụ, nói rằng tôi muốn để gọi chức năng của tôi như thế này:Perl6 cờ chức năng tùy chọn

format 'a b c'; 

hay như thế này:

format :pretty 'a b c'; 

Làm thế nào tôi có thể làm điều này? Cảm ơn

Trả lời

10

Đó chỉ là một đối số được đặt tên, trong trường hợp cờ là một đối số boolean. Tất cả điều này hoạt động vì :pretty là cú pháp đường cho các cặp :pretty(True) aka pretty => True.

Bạn có thể sử dụng giá trị boolean

sub format($arg, Bool :$pretty = False) { 
    if $pretty { ... } 
    else { ... } 
} 

hoặc sử dụng sự hiện diện của nó đối với đa văn

multi format($arg) { ... } 
multi format($arg, Bool :$pretty!) { ... } 

Trong ví dụ đầu tiên, chúng tôi cung cấp một giá trị mặc định (mà không phải là thực sự cần thiết như giá trị không xác định boolifies để False, nhưng nó được cho là 'điều phải làm' ngữ nghĩa), trong thứ hai, chúng tôi đã làm cho nó một tham số cần thiết bằng cách thêm !.

Cũng lưu ý rằng tên đối số vẫn phải được phân cách bằng dấu phẩy, tức là bạn muốn sử dụng nó như

format :pretty, 'a b c'; 
3

Nếu bạn thực sự muốn điều đó cú pháp lẻ, bạn có thể sử dụng một nhà điều hành và một số ma thuật subsignature. Phương thức Bool là tùy chọn và lớp Pretty có thể trống. Nó chỉ có để cung cấp một cái gì đó cho MMD-dispatcher để giữ lên.

class Pretty { method Bool {True} }; 
sub prefix:<:pretty>(|c){ Pretty.new, c }; 
multi sub format((Pretty:D $pretty, |a)){ dd $pretty.Bool, a }; 
multi sub format(|c){ dd c }; 
format :pretty 'a b c'; format 'a b c'; 
# OUTPUT«Bool::True␤\(\("a b c"))␤\("a b c")␤» 
Các vấn đề liên quan