【发布时间】:2022-01-02 17:51:03
【问题描述】:
我对一段代码有些困惑。这是关于 perl 中的三元运算符。我不知道如何对其设置更多条件。从字面上看,我不太明白这个表达。
my $class = $user_name ? '' : (grep { $_ eq $task_id } @tasks_todo) ? 'class="todo" : 'class="crossed"';
我想用我的新变量设置另一个条件,应该是:
$required ? '' : 'class="todo"' : 'class="crossed"'
$required 是 Mojo:Collection 类型,表示由查询获取的集合类型数据。
有人可以解释一下下面的条件并告诉我是否可以对三元运算符设置另一个条件吗?允许多少个条件以及使用三元运算符的最佳实践是什么?
【问题讨论】:
-
写这话的人太聪明了,不利于他们自己。将其拆分为更清晰的 if/else 并没有错。
-
use List::Util qw/any/; my $class = ""; unless ($user_name) { if (any { $_ eq $task_id } @tasks_todo) { $class = 'class="todo"'; } else { $class = 'class="crossed"'; } }(注意List::Util::any是grep的更有效替代方案) -
恕我直言,条件运算符的最佳实践是不要在同一个表达式中使用多个。
-
使其可读是未来维护的胜利。其中一种方法是将其分成多行,或者使用多个表达式而不是一个可能会变得太长的表达式。
标签: perl