Tôi có câu hỏi liên quan đến các khối mã trong perl. Với mã sau:khối mã perl
my @newArr = sort { $a <=> $b } @oldArr;
sử dụng khối mã làm đối số.
tôi có thể viết lại nó như:
sub sortFunc {
return $a <=> $b;
}
my @newArr = sort sortFunc @oldArr;
Tôi cố gắng để tìm ra cách cơ chế này hoạt động. Hiện tại, tôi cần triển khai một loại hàm sắp xếp phức tạp trông có vẻ lộn xộn trong một khối mã, Tuy nhiên nó phụ thuộc vào một số biến cục bộ. Ví dụ:
foreach my $val (@values){
my @newArr = sort { $hash{$a}{$val}<=> $hash{$b}{$val} } @oldArr;
...
}
nhưng giả sử rằng chức năng sắp xếp phức tạp hơn, vì vậy nó sẽ không gọn gàng phù hợp với mã ở trên.
Nếu tôi cố gắng sử dụng hàm (được định nghĩa cục bộ trong phạm vi vòng lặp for), tôi tiếp tục nhận "Sử dụng giá trị chưa được khởi tạo trong phần tử băm".
Tôi cho rằng đó là vì phụ được phân tích cú pháp một lần và không được tạo lại để lặp lại lặp lại của vòng lặp for. Tôi đang cố gắng hiểu cách triển khai khối mã sẽ được giải thích lại mỗi lần lặp lại hoặc có thể cách chuyển các tham số
'my @newArr = sort {$ a <=> $ b} @oldArr;' @ArArr nghĩa là gì theo điều này? –
"nhưng hãy giả sử rằng hàm sắp xếp phức tạp hơn" -> có lẽ bạn nên đăng mã của mình cho hàm sắp xếp này. – TLP