作者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