Raku中序列操作符`...`换行后被误识别为yada-operator问题咨询
Raku序列语法换行引发的Yada运算符误解析问题
正常运行的代码
以下代码可正确生成斐波那契序列前10项:
my @fibo = 1, 1, -> $a, $b { $a + $b } ... *; say @fibo[^10];
输出:
(1 1 2 3 5 8 13 21 34 55)
换行后报错的情况
将代码拆分为多行后,会触发语法错误:
my @fibo = 1, 1, -> $a, $b { $a + $b } ... *; say @fibo[^10];
错误信息:
* in block <unit> at ./dotdotdot line 4
此时代码中的...被Raku解释为Yada运算符(用于标记未实现的代码逻辑),而非序列构造语法的一部分。尽管Raku通常忽略空白对语义的影响,但此处换行打破了序列运算符与前后元素的语法关联。
解决方法
将...与前一个序列元素放在同一行,即可恢复序列的正确解析:
my @fibo = 1, 1, -> $a, $b { $a + $b } ... *; say @fibo[^10];
(注:此示例为简化场景,实际问题发现于编写超长复杂序列时,测试版本为Raku 2023.11)
内容的提问来源于stack exchange,提问作者mscha
相关产品推荐
相关产品推荐

