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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top