Re: [問題] Perl 學習手冊 書上的問題

看板Perl作者 (再努力一點...)時間17年前 (2007/10/15 20:14), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串3/3 (看更多)
謝謝兩位的回答~ 我把問題表答的清楚一點... ※ 引述《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

10/17 00:31, , 1F
這個$element叫做enumerator, 在多層迴圈裡,若內層回圈需
10/17 00:31, 1F

10/17 00:33, , 2F
要用到外層迴圈的值時就非用不可如 @i= (1,2,3)@j=(6,7,8)
10/17 00:33, 2F

10/17 00:35, , 3F
要算所有i+j就一定要用這種方式 另外在'Perl最佳實務'這書
10/17 00:35, 3F

10/17 00:37, , 4F
提到若迴圈內容複雜時 $_符號會影響閱讀 所以該書作者極力
10/17 00:37, 4F

10/17 00:39, , 5F
建議使用enumerator
10/17 00:39, 5F

10/17 00:39, , 6F
說錯 叫iterator才對 中文名稱是反覆器
10/17 00:39, 6F

10/19 11:17, , 7F
謝謝 redmist :)
10/19 11:17, 7F
文章代碼(AID): #174rch7O (Perl)
文章代碼(AID): #174rch7O (Perl)