이 질문은 대답하기가 매우 쉽고 대답은 "아니오"라고 생각합니다. 그러나 나는 무언가를 놓치고 있지 않은지 확인하고 싶습니다.
다음 코드를 고려하십시오.
sub f(:$a = 'foo') { say $a }
sub g(:$a) { f :$a }
g(); # OUTPUT: «(Any)»
의 서명 / 몸을 바꿀 수있는 좋은 방법이 있나요 &f
또는 &g
그래서이 인쇄 그 foo
대신은 Any
?
에 &f
대한 기본값을 사용하는 두 가지 방법을 알고 $a
있지만 둘 다 좋지 않습니다.
옵션 1:
sub f(:$a = 'foo') { say $a }
multi g(:$a) { f :$a }
multi g() { f }
g(); # OUTPUT: «foo»
옵션 2 :
sub f(:$a = 'foo') { say $a }
sub g(:$a) { f |(:$a with $a) }
g(); # OUTPUT: «foo»
이 두 가지 모두 훌륭한 접근 방식으로 느껴지지 않으므로 누군가 제가 놓치고있는보다 우아한 접근 방식을 보여줄 수 있기를 바랍니다. 반면에이 두 가지가 모두 작동하므로 이것이 약간 우아하지 않은 코너 (그리고 매우 작은 코너)라면 큰 문제가되지 않을 것입니다.
옵션 1을 사용하거나 sub "g"가 항상 sub "f"를 호출하는 경우 모든 매개 변수 의 캡처를 생성하고이를 전달합니다.
sub f(str :$a = 'foo') { say $a }
sub g(|c) { f |c }
g a => "bar"; # "bar"
g; # "foo"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다