2016-08-04 5 views
5

Perl6에서 선택적 플래그를 사용하는 함수를 구현하려면 어떻게해야합니까? 예를 들어, 나는이처럼 내 함수를 호출 할 말 : Perl6 선택적 함수 플래그

format 'a b c'; 

또는 같은

:

format :pretty 'a b c'; 

내가 어떻게 할 수 있습니까? 감사합니다

답변

10

플래그의 경우 부울 값의 경우 그냥 명명 된 인수 일뿐입니다. 이것은 모두 :pretty:pretty(True) (pretty => True) 쌍의 구문 설탕이기 때문에 모두 작동합니다.

당신은 부울 값

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

을 사용하거나 첫 번째 예에서는 멀티 파견

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

에 대한 입지를 사용할 수 있습니다, 우리가 정말 필요하지 않은 (디폴트 값을 제공 정의되지 않은 값은 False으로 boolifies하지만 논란의 여지는 있지만 의미 상으로는 '옳은 일'입니다.) 두 번째 항목에서는 !을 추가하여 필수 매개 변수로 지정했습니다.

또한 명명 된 인수는 여전히 쉼표로 구분해야 할 당신이 정말로 이상한 구문, 당신은 운영자와 일부 subsignature 마법을 사용할 수 원하는 경우

format :pretty, 'a b c'; 
3

으로 사용할 것, 즉 있습니다. Bool 메서드는 선택 사항이며 클래스 Pretty은 비어있을 수 있습니다. MMD 디스패처가 잡을 수있는 무언가를 제공하기 만하면됩니다.

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")␤»