作者lzch (再努力一点...)
看板perl
标题Re: [问题] Perl 学习手册 书上的问题
时间Mon Oct 15 20:14:34 2007
谢谢两位的回答~
我把问题表答的清楚一点...
※ 引述《lzch (再努力一点...)》之铭言:
Perl 学习手册 4e, O'REILLY
p.256
完整程式如下:
#!/usr/bin/perl
sub total {
my $sum;
foreach (@_) {
$sum += $_;
}
$sum;
}
sub average {
if (@_ == 0) { return }
my $count = @_;
my $sum = &total(@_);
$sum/$count;
}
sub above_average {
my $average = &average(@_);
my @list;
foreach $element (@_) {
if ($element > $average) {
push @list, $element;
}
}
@list;
}
my @fred = &above_average(1..10);
print "\@fred 的内容为 @fred\n";
print "(结果应该是 6 7 8 9 10)\n";
my @barney = &above_average(100, 1..10);
print "\@barney 的内容为 @barney\n";
print "(结果应该是 100 )\n";
...
...
副常式 above_average,会建立所需要之项目所构成之串列,并传回
它。(为何回圈的控制变数是 $element,而不是 Perl 最喜爱的预设
变数 $_?)请注意,
这个副常式对於空串列有不同的处置方式。
==
我没有原文,但是就我这本书读到现在为止,
我以为作者的意思是,这里不用 foreach (@_) 而用 foreach $element (@_)
是有特别的用意。(虽然我有试过将所有 $element 都换成 $_,仍可执行成功)
又或者和最後一句黄色部份有关??
还是我想太多了呢 :p
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.230.41
1F:推 redmist:这个$element叫做enumerator, 在多层回圈里,若内层回圈需 10/17 00:31
2F:→ redmist:要用到外层回圈的值时就非用不可如 @i= (1,2,3)@j=(6,7,8) 10/17 00:33
3F:→ redmist:要算所有i+j就一定要用这种方式 另外在'Perl最佳实务'这书 10/17 00:35
4F:→ redmist:提到若回圈内容复杂时 $_符号会影响阅读 所以该书作者极力 10/17 00:37
5F:→ redmist:建议使用enumerator 10/17 00:39
6F:→ redmist:说错 叫iterator才对 中文名称是反覆器 10/17 00:39
7F:推 lzch:谢谢 redmist :) 10/19 11:17