【发布时间】:2020-07-15 22:23:46
【问题描述】:
我最初的计划是使用两个 once {next} 块来跳过文件中的前两行(这里将 a 模拟为多行字符串):
for "A\nB\nC\n".lines() -> $line {
once {next}
once {next}
put $line;
}
但它只跳过了一次迭代而不是两次,输出如下:
B
C
而不是我的预期:
C
显然,单个once {next} 以某种方式取消了同一范围内所有剩余的once 块:
my $guard = 3;
loop {
last if $guard-- <= 0;
once { next };
once { put 'A: once ' };
once { put 'A: once again' };
put 'A: many ';
}
$guard = 3;
loop {
last if $guard-- <= 0;
once { put 'B: once ' };
once { next };
once { put 'B: once again' };
put 'B: many ';
}
$guard = 3;
loop {
last if $guard-- <= 0;
once { put 'C: once ' };
once { put 'C: once again' };
once { next };
put 'C: many ';
}
输出:
A: many
A: many
B: once
B: many
B: many
C: once
C: once again
C: many
C: many
(此处的示例代码是 https://docs.raku.org/language/control#once 代码的修改版本)。
这是一个错误还是我误解了once {next}?
【问题讨论】:
-
顺便说一下,跳过前 X 行的另一种方法是使用匿名自增变量:
for "A\nB\nC\n".lines() -> $line { next unless $++ > 1; put $line;}
标签: raku