Wie konvertiere ich den String "User"
in User
?
Wie konvertiere ich den String "User"
in User
?
Antworten:
Object.const_get("User")
ActiveSupport ist nicht erforderlich.
class User; def self.lookup; const_get('SomeClassName);end; end
User.lookup
Gibt die Klasse selbst zurück.
Sie können die Module#const_get
Methode verwenden. Beispiel:
irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
Die empfohlene Methode ist die Verwendung der ActiveSupport-Konstante:
'User'.constantize
Sie können auch Kernel verwenden const_get
, aber in Ruby <2.0 werden keine Konstanten mit Namespace unterstützt, also ungefähr so:
Kernel.const_get('Foobar::User')
wird in Ruby <2.0 fehlschlagen. Wenn Sie also eine generische Lösung wünschen, sollten Sie den ActiveSupport-Ansatz verwenden:
def my_constantize(class_name)
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
raise NameError, "#{class_name.inspect} is not a valid constant name!"
end
Object.module_eval("::#{$1}", __FILE__, __LINE__)
end
'User'.safe_constantize