Je suis en train d'optimiser un peu de code et je veux plutôt sur la vérification d'une valeur à chaque appel de méthode juste définir la méthode pour répondre à la vérification déjà pré-calcul, car cette vérification ne change pas sur toute la durée de vie de l'instance.Définir les méthodes singletons sur l'initialisation en utilisant les variables d'instance
J'ai décidé de définir différentes versions de la méthode pour chaque instance créée. Plus ou moins de cette façon:
class TestingSingletonMethodsWithVariable
METHODS = %w(a b c d)
def initialize(favorite_method)
class << self
METHODS.each do |method_name|
if(favorite_method == method_name)
define_method method_name do
puts "#{method_name} its my favorite method"
end
else
define_method method_name do
puts "#{method_name} its not my favorite method"
end
end
end
end
end
end
t = TestingSingletonMethodsWithVariable.new('b')
t.a
t.b
t.c
t.d
# $ ruby test/testing_singleton_methods_with_variable.rb
# test/testing_singleton_methods_with_variable.rb:7:in `initialize': undefined local variable or method `favorite_method' for #<Class:#<TestingSingletonMethodsWithVariable:0x1001a77b8>> (NameError)
# from test/testing_singleton_methods_with_variable.rb:6:in `each'
# from test/testing_singleton_methods_with_variable.rb:6:in `initialize'
# from test/testing_singleton_methods_with_variable.rb:21:in `new'
# from test/testing_singleton_methods_with_variable.rb:21
Ce qui se passe est que quelque chose de bizarre se passe avec les variables: les variables hors côté déclare le bloc class << self
ne sont pas visibles pour les variables à l'intérieur. Tout le monde peut m'expliquer comment puis-je faire le comportement que je cherche?
Merci
Je pense qu'il ya un mélange avec votre exemple. Dans la ligne d'objet, vous mentionnez des variables d'instance, mais il n'y a aucune variable d'instance nulle part dans le code que vous avez publié. –