Я пытаюсь оптимизировать некоторый код, и вместо этого я хочу проверять значение при каждом вызове метода , просто определить метод для ответа с проверкой, предварительно рассчитав потому что эта проверка не изменяется в течение всего времени существования экземпляра.
Я решил определить разные версии метода для каждого созданного экземпляра. Более или менее так:
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
Что происходит, так это то, что с переменными происходит что-то странное: переменные объявляют, что блок class << self
снаружи не виден для переменных внутри.
Кто-нибудь может объяснить мне, как я могу вести себя, как я ищу?
Спасибо