gpt4 book ai didi

raku - Perl 6's uncudled else 是语句分离的特例吗?

转载 作者:行者123 更新时间:2023-12-04 08:32:17 25 4
gpt4 key购买 nike

来自 syntax doc :

A closing curly brace followed by a newline character implies a statement separator, which is why you don't need to write a semicolon after an if statement block.


if True {
say "Hello";
}
say "world";

没关系, Why is this Perl 6 feed operator a “bogus statement”? 发生了什么| .

但是,这条规则如何适用于未拥抱的 else ?这是特例吗?
if True {
say "Hello";
}
else {
say "Something else";
}
say "world";

或者, with-orwith example怎么样? :
my $s = "abc";
with $s.index("a") { say "Found a at $_" }
orwith $s.index("b") { say "Found b at $_" }
orwith $s.index("c") { say "Found c at $_" }
else { say "Didn't find a, b or c" }

最佳答案

您找到的文档并不完全正确。 documentation has been updated and is now correct .现在是这样写的:

Complete statements ending in bare blocks can omit the trailing semicolon, if no additional statements on the same line follow the block's closing curly brace }.

...

For a series of blocks that are part of the same if/elsif/else (or similar) construct, the implied separator rule only applies at the end of the last block of that series.



原答案:

查看 if 的语法在 nqp Rakudo ,似乎是 if/elsif/else一组块被一起解析为一个控制语句。
if 的规则在 nqp
rule statement_control:sym<if> {
<sym>\s
<xblock>
[ 'elsif'\s <xblock> ]*
[ 'else'\s <else=.pblock> ]?
}

( https://github.com/perl6/nqp/blob/master/src/NQP/Grammar.nqp#L243 ,截至 2017 年 8 月 5 日)
if 的规则位于乐堂
rule statement_control:sym<if> {
$<sym>=[if|with]<.kok> {}
<xblock(so ~$<sym>[0] ~~ /with/)>
[
[
| 'else'\h*'if' <.typed_panic: 'X::Syntax::Malformed::Elsif'>
| 'elif' { $/.typed_panic('X::Syntax::Malformed::Elsif', what => "elif") }
| $<sym>='elsif' <xblock>
| $<sym>='orwith' <xblock(1)>
]
]*
{}
[ 'else' <else=.pblock(so ~$<sym>[-1] ~~ /with/)> ]?
}

( https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Grammar.nqp#L1450 截至 2017 年 8 月 5 日)

关于raku - Perl 6's uncudled else 是语句分离的特例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45520479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com