Trong hồ sơ, tôi đã xem qua chức năng này trong 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 hiện một loại số ngược lại dựa trên một số vị quan trọng, ví dụ:
my @objects = load_objects_from_database();
# sort by rating, highest first
@objects = rev_nsort_by { $_->rating } @objects;
Tôi hiểu một cách hoàn hảo tại sao rev_nsort_by
, như thể hiện ở trên, hoạt động như dự định, nhưng tôi tự hỏi tại sao nó quá phức tạp. Cụ thể, tôi tự hỏi tại sao
my @keys = map { local $_ = $_[$_]; scalar $keygen->($_) } 0 .. $#_;
không được viết như
my @keys = map { scalar $keygen->($_) } @_;
trông chức năng tương đương với tôi. Tôi có thiếu một số hành vi góc trường hợp của $_
ở đây, phiên bản dài hơn có tính theo một cách nào đó không?
Đóng đinh nó. Cảm ơn! –