Новичок в Perl снова здесь, пытаясь понять closure
в Perl.
Итак, вот пример кода, который я не понимаю:
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");
Итак, мои вопросы:
- Если переменной присваивается функция, автоматически ли она ссылается на эту функцию?
- В этом выше коде можно написать вместо
$f = \make_saying("Howdy")
? И когда я могу использовать&
, потому что я попытался использовать это при передаче параметров (&$f("world")
), но это не сработает. - и, наконец, В этом коде выше, как в нем ** слова
world
иearthlings
добавляются к словамhowdy
иgreetings
.
Примечание. Я понимаю, что $f несколько связан с функцией с параметром howdy
, так что мое понимание того, как добавлен world
. То, что я не понимаю, - это вторая функция внутри. Как это управляет своей магией. Извините, я действительно не знаю, как спросить об этом.