Standard Ruby-Accessor-Methode?
-
10-07-2019 - |
Frage
Gibt es eine Standardmethode oder Klasse Accessor, die ich auf eine Ruby-Klasse hinzufügen, die aufgerufen werden, wenn ein Accessor (Rubin wie Eigenschaft) nicht beendet? Ich kann dann einige benutzerdefinierten Codes schreibt aus wie eine Array-Liste aus einer Datenbank, wo der Wert gelesen antworten kann wie ein Accessor zugegriffen werden, ohne dass ich den Accessor Code schreiben (da, wenn aus einer Datenbank seines unbekannten lesen).
Mit Ruby-MRT 1.9
Danke!
Lösung
Ja, es ist method_missing
genannt; es wird aufgerufen, wenn ein nicht definierter Methode verwendet wird. Sie können es verwenden, um jede Methode hinzufügen oder emulieren Sie wollen, einschließlich Accessoren.
Zum Beispiel, wenn Sie diese auf einem Hash
werfen können Sie den Inhalt des Hash als Eigenschaften behandeln:
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
wir an, Sie schreiben:
h.bob = "Robert"
und
if h.bill == "William" ...
und so weiter zusätzlich zu dem normaleren h[:bob] = ...
Stil.