myślę, że to może być najlepiej na przykładzie zapytał:Jak serializować zamknięcie w Perlu?
use strict;
use warnings;
use 5.010;
use Storable qw(nstore retrieve);
local $Storable::Deparse = 1;
local $Storable::Eval = 1;
sub sub_generator {
my ($x) = @_;
return sub {
my ($y) = @_;
return $x + $y;
};
}
my $sub = sub_generator(1000);
say $sub->(1); # gives 1001
nstore($sub, "/tmp/sub.store");
$sub = retrieve("/tmp/sub.store");
say $sub->(1); # gives 1
Kiedy zrzucić /tmp/sub.store
widzę:
$VAR1 = sub {
package Storable;
use warnings;
use strict 'refs';
my($y) = @_;
return $x + $y;
}
Ale $x
nigdy nie jest zdefiniowana w tym sub. Spodziewam się, że sub wygenerowany przez sub_generator
będzie miał zastąpioną $x
swoją rzeczywistą wartością podczas generowania. Jak mam to rozwiązać?
Uwaga: to pytanie dotyczy tego one.
Być może nadszedł czas, aby się cofnąć i zastanowić, czy serializacja subskrypcji jest dobrym pomysłem? Rzadko spotykałem się z koniecznością zrobienia czegoś takiego w mojej karierze. – Ether
@Pozostałem przyjął propozycję użycia obiektu. Z jakiegoś powodu miałem tendencję do omijania przedmiotów w Perlu, dopóki nie przedstawiliście mojego Łosia, co czyni wszystko znacznie przyjemniejszym. –