以下代码有效:
my @fibo = 1, 1, -> $a, $b { $a + $b } ... *;
say @fibo[^10];
Run Code Online (Sandbox Code Playgroud)
输出:
(1 1 2 3 5 8 13 21 34 55)
Run Code Online (Sandbox Code Playgroud)
但是如果你将其分成多行,如下所示:
my @fibo = 1,
1,
-> $a, $b { $a + $b }
...
*;
say @fibo[^10];
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
*
in block <unit> at ./dotdotdot line 4
Run Code Online (Sandbox Code Playgroud)
在这种情况下, 似乎...被解释为 yada 运算符。但不应该,不是吗?两个版本的代码应该是等效的。(这不是 Python,空格应该是无关紧要的。)
作为解决方法,以下内容确实可以正常工作:
my @fibo = 1,
1,
-> $a, $b { $a + $b } ...
*;
say @fibo[^10];
Run Code Online (Sandbox Code Playgroud)
(当然,这是一个非常人为的示例,但我在使用一个更复杂的序列时发现了这一点,该序列太长而无法放在一行中。)
测试截止至 2023.11。
Raku 有一个非常简单的无情规则,即如果一行代码中的最后一个内容是一个可以作为语句结尾的块,那么它就是语句的结尾。有很多解决方案,例如您建议的解决方案,或者\在右花括号后添加一个。-莱夫