Pau*_*han 1 perl coding-style pattern-matching
在Haskell(F#,Ocaml等)中,我可以这样做:
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
Run Code Online (Sandbox Code Playgroud)
它计算给定整数的符号.
这可以简明扼要地表达某些逻辑流程; 我在Perl中遇到过其中一个流.
现在我正在做的是
sub frobnicator
{
my $frob = shift;
return "foo" if $frob eq "Foomaticator";
return "bar" if $frob eq "Barmaticator";
croak("Unable to frob legit value: $frob received");
}
Run Code Online (Sandbox Code Playgroud)
这让人感到无比和丑陋.
这段代码必须在Perl 5.8.8上运行,但我当然也对更现代的技术感兴趣.
这是另一种可能的方法,它仍然有点罗嗦,但也许更好地反映了流程.(在Perl最佳实践一书中,作者建议大多避免使用postfix形式,if因为你需要一直扫描到右边才能理解发生了什么.)如果有助于突出显示条件,你可以添加括号.
sub sign
{
my $x = shift;
$x > 0 and return 1;
$x == 0 and return 0;
$x < 0 and return -1;
}
sub frobnicator
{
my $frob = shift;
$frob eq "Foomaticator" and return "foo";
$frob eq "Barmaticator" and return "bar";
croak("Unable to frob legit value: $frob received");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |