/ / Domyślna metoda akcesora Rubiego? - ruby, brak metody

Domyślna metoda dostępu do Rubiego? - ruby, brak metody

Czy istnieje domyślna metoda lub metoda dostępu klasyMogę dodać do klasy Ruby, która jest wywoływana, jeśli akcesor (właściwość podobna do Rubiego) nie wychodzi? Mogę następnie napisać niestandardowy kod, aby odpowiedzieć na przykład z listy tablic odczytywanej z bazy danych, w której można uzyskać dostęp do wartości jak akcesor bez pisania kodu akcesora (ponieważ jeśli odczytany z bazy danych jest nieznany).

Korzystanie z Ruby MRI 1.9

Dziękuję Ci!

Odpowiedzi:

10 dla odpowiedzi № 1

Tak, to się nazywa method_missing; jest wywoływana za każdym razem, gdy używana jest niezdefiniowana metoda. Możesz go użyć do dodania lub emulacji dowolnej metody, w tym akcesorów.

Na przykład, jeśli wrzucisz to na plik Hash zawartość skrótu można traktować jako właściwości:

h = {}
def h.method_missing(*args)
if args.length == 1
self[args[0]]
elsif args.length == 2 and args[0].to_s =~ /^(.*)=$/
self[$1.intern] = args[1]
else
super
end
end

piszemy:

h.bob = "Robert"

i

if h.bill == "William" ...

i tak dalej, oprócz bardziej normalnego h[:bob] = ... styl.