จะส่งพารามิเตอร์ไปยังโทเค็นที่อ้างอิงโดยตัวแปรได้อย่างไร


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 อย่างชัดเจนรู้ว่าคุณต้องการที่จะใช้$ตัวแปรโทเค็น sigil'd Callableเป็น

  • ประกาศตัวแปรว่าอยู่Callableในตำแหน่งที่ชัดเจนและทำการเปลี่ยนแปลงที่เกี่ยวข้องในการโทร:

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

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

2
อาจมีการใช้เพื่อชี้ให้เห็นว่าโทเค็นเป็นเพียง regexen กับชุดคุณลักษณะบางอย่างและในทางกลับกันก็คือ Callables ดังนั้นพวกเขาสามารถเข้าไปใน&ตัวแปร
user0721090601

1
ขอบคุณ! ในขณะที่ jnthn ตอบคำถามของฉันโดยตรงฉันกำลังตั้งค่าสถานะนี้เป็นคำตอบเพราะมันเน้นถึงสาเหตุที่แท้จริงของปัญหาของฉัน - sigil ผิด รักษาโทเค็นเป็น Callable ตั้งแต่เริ่มต้นเป็นโซลูชันที่สะอาดกว่ามาก
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.