12
在分析,我在List::UtilsBy碰到這個功能來:
sub rev_nsort_by(&@) {
my $keygen = shift;
my @keys = map { local $_ = $_[$_]; scalar $keygen->($_) } 0 .. $#_;
return map { $_[$_] } sort { $keys[$b] <=> $keys[$a] } 0 .. $#_;
}
rev_nsort_by確實基於一些關鍵的謂詞反向數字排序,例如:
my @objects = load_objects_from_database();
# sort by rating, highest first
@objects = rev_nsort_by { $_->rating } @objects;
我完全理解爲什麼rev_nsort_by
,如圖所示上面,按預期工作,但我想知道爲什麼它如此複雜。具體地講,我不知道爲什麼
my @keys = map { local $_ = $_[$_]; scalar $keygen->($_) } 0 .. $#_;
沒有寫成
my @keys = map { scalar $keygen->($_) } @_;
看起來功能上等同於我。我在這裏錯過了一些$_
的角落案例行爲,其中較長的版本在某種程度上是多少?
釘它。謝謝! – 2013-04-25 12:25:17