39 Stimmen

Ruby-Symbol für die Klasse

Gibt es in Ruby eine Möglichkeit, ein Symbol oder eine Zeichenkette in eine gleichnamige Klasse zu verwandeln?

Wenn ich zum Beispiel eine Klasse habe wie

class Bob
  def talk
     puts "Hi, I'm bob"
  end
end

Und eine Methode, die ich irgendwo anders im Code habe, wird ein Symbol :bob übergeben, kann ich das irgendwie in die Klasse Bob verwandeln? Vielleicht so etwas wie

b = :Bob.new
b.talk

Oder gibt es eine Möglichkeit, etwas Ähnliches zu tun?

2voto

Joe Punkte 405

Hier ist etwas, das ich auf der Suche nach etwas Ähnlichem mit Modul-/Namespace-Unterstützung gefunden habe:

['foo', 'bar'].inject {|r,e| "#{r.classify}::#{e.classify}"}.constantize

Erzeugt

=> Foo::Bar

Dies erfordert jedoch Rails und funktioniert natürlich nur, wenn das Array mehr als ein Element hat.

Dies scheint ziemlich einfach, so dass ich sicher bin, dass ich etwas übersehen, würde jemand zu beraten, warum dies nicht ein guter Ansatz sein würde?

Danke!

0 Stimmen

Stellen Sie eine Frage innerhalb einer Antwort? Schäm dich! ;)

0 Stimmen

@JustinStolle, ich glaube nicht, dass es sich um eine neue Frage handelt, eher um eine Anleitung zur ursprünglichen Frage :)

0voto

FredyK Punkte 172

In meinem Fall haben beide Beispiele funktioniert, aber man darf auch den Namespace nicht vergessen:

  Object.const_get("ModuleName::#{class_model_name}")

oder

  Kernel.const_get("ModuleName::#{class_model_name}").

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X