- 论坛徽章:
- 0
|
Perl中“条件表达式”能够传递么?
用一个例子描述下我的问题
有三个整数$i, $j, $k,
有多个条件,如:
条件1:0 <= $j - $i <= 2;
条件2:0 <= $k - $j <= 2;
条件3:1 <= $k - $i <= 3;
条件4:($i + $j +$k)%3 = 1;
有一个数组@a;
依次判断条件1~4,如果满足,向@a压入数据1,如果不满足,压入0 。
于是有如下程序:
if($j-$i >= 0 && $j-$i <= 2) {push @a, 1;} else { push @a, 0;}
if($k-$j >= 0 && $k-$j <= 2) {push @a, 1;} else { push @a, 0;}
if($k-$i >= 1 && $k-$i <= 3) {push @a, 1;} else { push @a, 0;}
if( ($i+$j+$k)%3 = 1) {push @a, 1;} else { push @a, 0;}
可以看到,上面的程序除了条件表达式不同,其余部分都相同,
大量的重复代码简直是坑爹,应该可以用一个循环或子程序来实现。
比如写一个子程序:
sub judge{
my $condition = shift @_ ;
if($condition代表的条件表达式为真){push @a, 1} else {push @a,0}
}
&judge(条件表达式1 );
&judge(条件表达式2 );
&judge(条件表达式3 );
&judge(条件表达式4 );
或者将条件表达式作为一个数组的元素,遍历这个数组。
但这时有一个问题:
条件表达式如何才能传递到子程序中,然后在子程序中对之再进行判断;
条件表达式如何才能作为数组的元素,然后在遍历数组时对之再进行判断?
以我的水平,传递之后,条件表达式,就变成了一个字符串或一个引用了,
我没有办法再对之进行判断。
请问大家有什么办法没?
或者不传递条件表达式,用其它的方法实现,
目的是不要重复地写if( (条件表达式) {push @a, 1;} else { push @a, 0;}
啰嗦了这么多,不知说清楚没。
谢谢各位大侠。 |
|