我試圖優化一些代碼定義上初始化單的方法,我想上,而不是在檢查每一個方法調用一定的價值,定義方法與檢查已經預先計算響應,因爲這個檢查在實例的整個生命中不會改變。使用實例變量
我決定爲每個創建的實例定義不同版本的方法。更多或更少的這樣:
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
塊是不是裏面的變量是可見的。
任何人都可以解釋我怎麼做我正在尋找的行爲?
由於
我認爲有一些與你的例子混淆。在主題行中提到了實例變量,但是您發佈的代碼中沒有任何實例變量。 – 2010-11-16 17:56:40