변수가 참조하는 토큰에 매개 변수를 전달하는 방법은 무엇입니까?


10

토큰 이름을 직접 사용하여 토큰 서명을 쉽게 사용할 수 있습니다.

my token t ( $x ) { $x };

'axb' ~~ / 'a' <t: 'x'> 'b' /;      # match
'axb' ~~ / 'a' <t( 'x' )> 'b' /;    # match

그러나 토큰이 변수에 저장되어있을 때 이것을 수행하는 방법을 찾지 못했습니다.

my $t = token ( $x ) { $x };

'axb' ~~ / 'a' <$t: 'x'> 'b' /;
'axb' ~~ / 'a' <$t( 'x' )> 'b' /;

둘 다 :

===SORRY!=== Error while compiling ...
Unable to parse expression in metachar:sym<assert>; couldn't find final '>'

그 마법의 구문은 무엇입니까?

BTW : Raku 테스트 스위트를 찾아 보았으며에 해당 사례가 포함되어 있지 않습니다 roast/S05-grammar/signatures.t.

답변:


8

어느 한 쪽:

  • jnthn의 답변에서 솔루션을 사용하여 Raku가 $sigild 토큰 변수를로 사용하고 싶다고 명시 적으로 알도록하십시오 Callable.

  • 변수를 Callable처음에 명시 적으로 선언하고 해당하는 호출을 변경하십시오.

my &t = token ( $x ) { $x };

say 'axb' ~~ / 'a' <&t: 'x'> 'b' /;   # 「axb」
say 'axb' ~~ / 'a' <&t( 'x' )> 'b' /; # 「axb」

2
토큰은 특정 속성이 설정된 정규 표현식이고, 정규 표현식은 콜 러블이므로 &변수 로 들어갈 수 있음을 지적하는 데 사용할 수 있습니다 .
user0721090601

1
감사! jnthn이 내 질문에 매우 직접 대답하는 동안 내 문제의 실제 원인-잘못된시길을 강조하기 때문에이 질문에 답으로 표시합니다. 처음부터 토큰을 호출 가능으로 취급하는 것이 훨씬 깨끗한 솔루션입니다.
Pawel Pabian bbkr

11

를 놓고 &변수 전에 :

my $t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&$t: 'x'> 'b' /;
say 'axb' ~~ / 'a' <&$t( 'x' )> 'b' /;

파서는을 &찾은 다음 Raku 변수 파싱 규칙에 위임합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.