Mam ten obiekt perla. Po utworzeniu obiektu próbuję dodać nową metodę do obiektu w metodzie programu ładującego, którą można później wywołać.Dodaj nową metodę do istniejącego obiektu w perlu
Próbowałem całej masy rzeczy, które nie działały. Przykłady obejmują:
sub loader {
my ($self) = @_;
sub add_me {
my ($self, $rec) = @_
warn "yayyyyyy";
return $rec;
}
#here are the things I've tried that dont work:
# &{$self->{add_me}} = \&add_me;
# \&{$self->{add_me}} = \&add_me;
# assuming the class definition is in Holder::Class try to add it to symblol table
# *{Holder::Class::add_me} = \&add_me;
}
EDIT:
Dlatego, że muszę zrobić to Dodaję hak w moim kodu, gdzie użytkownik mojego oprogramowania będą mogli wstrzyknąć własnych podrzędny, aby edytować strukturę danych, tak jak będą.
Aby to zrobić, będą mogli edytować plik wtórnego, który będzie zawierał tylko jeden sub i uzyskać strukturę danych w pytaniu przeszedł w, więc coś takiego:
sub inject_a_sub {
my ($self, $rec) = @_;
#do stuff to $rec
return $rec;
}
następnie wewnątrz mojego oryginalnego obiektu na jego wystąpienie, sprawdzam, czy istnieje wyżej wymieniony plik, a jeśli tak, przeczytaj jego zawartość i przeanalizuj je. Na koniec chcę utworzyć kod eval'd, który jest tylko subem, metodą mojego obiektu. Mówiąc dokładniej, mój obiekt dziedziczy już metodę o nazwie do_something
i chcę, aby sub-read został wprowadzony przez eval nadpisać dziedziczoną metodę do_something
, tak aby po wywołaniu sub z pliku zewnętrznego działała.
Jego dziwny błąd:/
i boli mnie :(
Obi-Wan Kenobi jesteś moją jedyną nadzieją
Cheers
Chcesz dodać dodatkowe metody do konkretnych obiektów, a nie do wszystkich obiektów klasy? czy istnieje powód, dla którego nie można podklasy? – ysth
Obiekty nie mają metod, klasy mają metody. – ikegami
@ikegami: To zależy od modelu. Jedyne, na co naprawdę zależy Ci to, że instancja ma wszystkie metody określone przez jej klasę. Ruby ma zarówno metody klasy (które mogą być wywoływane tylko w klasie, nie w instancji), jak i metody instancji, które są zdefiniowane w klasie, ale są dostępne tylko za pośrednictwem instancji tej klasy. Posiada również * metody singleton *, które są unikalne dla danej instancji, co jest tym, czego ten OP wydaje się potrzebować. – Borodin