Jak działają zamknięcia w Perlu?
Nowicjusz w Perlu znowu tutaj, próbując zrozumiećclosure
w Perlu.
Oto przykład kodu, którego nie rozumiem:
sub make_saying {
my $salute = shift;
my $newfunc = sub {
my $target = shift;
print "$salute, $target!\n";
};
return $newfunc; # Return a closure
}
$f = make_saying("Howdy"); # Create a closure
$g = make_saying("Greetings"); # Create another closure
# Time passes...
$f->("world");
$g->("earthlings");
Moje pytania to:
Jeśli zmienna jest przypisana do funkcji, czy jest to automatycznie odniesienie do tej funkcji?W powyższym kodzie mogę napisać$f = \make_saying("Howdy")
zamiast? A kiedy mogę użyć&
ponieważ próbowałem użyć tego przy przekazywaniu parametrów (&$f("world")
) ale to nie działa.i wreszcie, w tym kodzie powyżej, w jaki sposób on zrobił słowaworld
iearthlings
dołącz do słówhowdy
igreetings
.Uwaga: Rozumiem, że $ f jest w pewien sposób powiązany z funkcją z parametremhowdy
tak rozumiem, jakworld
został dołączony. Czego nie rozumiem, to druga funkcja wewnątrz. Jak to działa swoją magią. Przepraszam, naprawdę nie wiem, jak zapytać o to.