我经常发现自己出于各种原因键入此模式:
return <expr> if <expr>
这不仅看起来很浪费,而且如果有任何形式的评估时间,那么这样做更有意义:
tmpVar = <expr>
return tmpVar if tmpVar
但是仅仅让 tmpVar 这样做似乎很愚蠢,而且它的可读性更差。 我一直想要这样的东西:
returnif <expr>
如果最终计算结果为非零/假值,则返回表达式。
不幸的是,这不是可以从语言内部轻松添加到语言中的东西,因为它改变了控制流。
对于大多数人来说,这是一个不寻常的请求还是一种不寻常的模式? 我很惊讶 ruby 和 perl 似乎都没有这样的构造。
额外加分 - 是否有任何语言具有这种结构?
在 Perl 中实现此类操作的一种方法是使用 CPAN 上的
Macro::Simple
模块:
#!/usr/bin/env perl
use v5.36;
use Macro::Simple {
'returnif($)' => '{ my $val = %s; return $val if $val; }'
};
sub demo($val) {
returnif($val == 0); # The parenthesis are required
return "not zero";
}
say demo(1);
say demo(0);