这段代码:
FOO:
"Hey".say;
for <1 2> {
say "1";
last FOO
}
打印
Hey
1
Control flow commands not allowed in toplevel
如果“Hey”.say被取消,则消除最后一条错误消息;这可能意味着错误实际上是在标签后面不允许非控制流命令。但the documentation(needs to be improved引用循环作为“示例”,the grammar表示它应该在语句前面。所以问题是:它可以用于if语句,还是只用于循环?
如果您在另一个范围内有此代码,则错误不同:
{
FOO:
"Hey".say;
for <a b> {
.say;
last FOO
}
}
# Hey
# a
# labeled last without loop construct
这也是LTA,因为它没有提到标签的名称。
但简而言之:Perl 6目前没有goto
。目前,标签仅可用作指定您想要next
,redo
或last
的循环结构的方式。通过在标签和循环结构之间放置一个语句,您可以有效地将它用作goto
,它仍然没有实现。
但事实上,对于我而言,关于这两个错误的LTA的票据确实存在。
此外,使用FIRST
移相器作为替代,似乎有相同的问题:
FOO:
for <a b> {
FIRST "Hey".say;
.say;
last FOO;
}
# Hey
# a
# labeled last without loop construct
但没有特定的标签运行良好:
FOO:
for <a b> {
FIRST "Hey".say;
.say;
last;
}
# Hey
# a
后一个问题绝对值得一个rakudo问题:添加为https://github.com/rakudo/rakudo/issues/2699。