以下是我想簡化的一段代碼,以避免在每次調用時傳遞額外的參數。實際上,我的用例是M
是一個用戶庫,沒有在每個方法上定義context
參數。 check
是一個未由用戶定義的方法。如何在Ruby中檢索調用者上下文對象?
# User code
module M
def do_something(context)
puts "Called from #{context}"
context.check
end
module_function :do_something
end
# Application code
class Bar
def check
puts "Checking from #{self}..."
end
end
class Foo < Bar
def do_stuff(scope, method)
scope.send method, self
end
end
# Executed by user
Foo.new.do_stuff M, :do_something
有沒有辦法做同樣認爲,如果沒有經過self
作爲輸入參數do_something
方法,以便檢索check
方法?
# User code
module M
def do_something
called_from_object = ???
puts "Called from #{called_from_object}"
called_from_object.check
end
module_function :do_something
end
# Application code
class Bar
def check
puts "Checking from #{self}..."
end
end
class Foo < Bar
def do_stuff(scope, method)
scope.send methood
end
end
# Executed by user
Foo.new.do_stuff M, :do_something
感謝您的支持!
我有着類似模塊上的樣子,但我不認爲我的問題和模塊之間的鏈接...你可以去到更多的細節? – David 2010-04-11 09:30:23
當模塊被固定爲一個特定模塊時(例如,在問題的原始版本中使用'M'),那麼'Foo'類可以包含'M',然後當'do_stuff'調用包含的'do_something'自己時Foo的實例。但是,如果模塊被作爲參數傳遞do_stuff(如更新示例中那樣),那麼我認爲您需要一種不同的方法。 – mikej 2010-04-11 13:09:12
感謝您的反饋,我同意在特定模塊「M」的情況下。我最初的帖子是一個特定的案例,沒有反映我真正想做的事情。 – David 2010-04-11 13:45:41