kann ich den Top-Level-Namespace in Ruby mit zwei Doppelpunkten vor dem Klassennamen zuzugreifen, zum Beispiel ::AmbiguousClass
Wie kann ich über Metaprogrammierung in Ruby auf den Namespace der obersten Ebene zugreifen?
Wie ich, dass über metaprogramming tun könnte?
ich viele Methoden (mehr als 5), die eine bestimmte Klasse zu validieren und zurück, von denen alle eine Zeile wie diese sind:
player = ::Player.find_by(uuid: input.player_uuid)
Ich möchte, dass machen allgemeinere so kann ich nur Gehe in der Klasse vorbei, um nach Uuid zu suchen, und reduziere alle diese Methoden zu einem. Dies ist, was ich versucht habe:
def validate_and_return(model_name)
uuid_attr = "#{model_name}_uuid".to_sym
return unless input.respond_to?(uuid_attr)
klass = ::model_name.to_s.captialize.constantize
instance = klass.find_by(uuid: input.send(uuid_attr))
# validate instance
end
das funktioniert nicht - es gibt einen Syntaxfehler:
Class: <SyntaxError>
Message: <"/home/dax/programming/xxx/lib/bus/converters/converter.rb:48: syntax error, unexpected tIDENTIFIER, expecting tCONSTANT
Was ist 'Eingabe'? –
Eingabe ist ein gebundenes Objekt (https://github.com/neopoly/bound/), ähnliches Verhalten zu openstruct – dax
Funktioniert 'klass = Object.const_get (model_name.capitalize)'? – Stefan