Mam pytanie dotyczące bloków kodu w perlu. Biorąc pod uwagę następujący kod:bloki kodu perl
my @newArr = sort { $a <=> $b } @oldArr;
używa bloku kodu jako argumentu.
mógłbym przepisać jako:
sub sortFunc {
return $a <=> $b;
}
my @newArr = sort sortFunc @oldArr;
Próbuję dowiedzieć się, jak działa ten mechanizm. Obecnie muszę zaimplementować rodzaj złożonej funkcji sortowania, która wyglądałaby niechlujnie w bloku kodu, ale zależy to od niektórych zmiennych lokalnych. Na przykład:
foreach my $val (@values){
my @newArr = sort { $hash{$a}{$val}<=> $hash{$b}{$val} } @oldArr;
...
}
ale pozwala zakładać, że funkcja sortowania jest bardziej skomplikowane, więc przyzwyczajenie to zgrabnie pasuje do kodu powyżej.
Jeśli spróbuję użyć funkcji (zdefiniowanej lokalnie w zasięgu pętli for), otrzymuję "Wykorzystanie niezainicjowanej wartości w elemencie hash".
Zakładam, że to dlatego, że podrzędny jest parsowany raz, a nie odtwarzany w celu powtórzenia iteracji pętli for. Próbuję zrozumieć, jak zaimplementować blok kodu, który byłby reinterpretowany w każdej iteracji, a może w jaki sposób przekazywać parametry.
'moja @newArr = sort {$ a <=> $ b} @oldArr;' co robi @oldArr znaczy zgodnie z tym? –
"ale pozwala założyć, że funkcja sortowania jest bardziej złożona" -> może powinieneś opublikować swój kod dla tej funkcji sortowania. – TLP