为什么没有“returnif <expr>”可以替代(并优化)模式“return <expr> if <expr>”

问题描述 投票:0回答:1

我经常发现自己出于各种原因键入此模式:

return <expr> if <expr>

这不仅看起来很浪费,而且如果有任何形式的评估时间,那么这样做更有意义:

tmpVar = <expr>
return tmpVar if tmpVar

但是仅仅让 tmpVar 这样做似乎很愚蠢,而且它的可读性更差。 我一直想要这样的东西:

returnif <expr>

如果最终计算结果为非零/假值,则返回表达式。

不幸的是,这不是可以从语言内部轻松添加到语言中的东西,因为它改变了控制流。

对于大多数人来说,这是一个不寻常的请求还是一种不寻常的模式? 我很惊讶 ruby 和 perl 似乎都没有这样的构造。

额外加分 - 是否有任何语言具有这种结构?

ruby perl return
1个回答
0
投票

在 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);
© www.soinside.com 2019 - 2024. All rights reserved.