避免在一系列条件中重复相同的变量

Bra*_* P. 11 raku

我有一个带有条件的脚本和一堆使用相同变量的检查。与此类似的东西:

my $size = "123B";
say "OK" if $size ~~ Str && $size.ends-with("B") && $size.chop >= 0;
Run Code Online (Sandbox Code Playgroud)

是否可以以避免重复的方式重写该行$size?我想到了类似交汇点的东西,但我不知道如何应用到它。或者也许是其他东西,但离我的线更短。

jub*_*us1 16

怎么样:

my $size1 = "123B";
given $size1 {
      say "OK" if .Str && $_.ends-with("B") && $_.chop >= 0;
};
Run Code Online (Sandbox Code Playgroud)

$_是 Raku(以及 Perl)中的“主题变量”。您可以缩写为$_.ends-with(),或将代码进一步缩短为.ends-with(),如下所示。同样$_.chop可以进一步缩短为.chop,如下所示。


或者使用[&&]归约元运算符:

my $size2 = "123B";
given $size2 {
      say "OK" if  [&&] .Str, .ends-with("B"), .chop >= 0;
};
Run Code Online (Sandbox Code Playgroud)

或者使用all()连接点:

my $size3 = "123B";
given $size3 {
      say "OK" if  $_ ~~ all(.Str, .ends-with("B"), .chop >= 0);
}
Run Code Online (Sandbox Code Playgroud)

或者given完全消除该块:

my $size4 = "123B";
say "OK" if  $size4 ~~ all(.Str, .ends-with("B"), .chop >= 0);
Run Code Online (Sandbox Code Playgroud)

https://course.raku.org/essentials/loops/topic/

  • @BrassP。条件部分中的“$_”可以省略。例如,只需编写 `.ends-with("B")` 和 `.chop >= 0` 即可。这就是“$_”变量的魔力。 (3认同)