【发布时间】:2012-12-14 06:12:28
【问题描述】:
是否可以获取包含在其类方法中的模块名称?
满足以下示例的部分代码:
module Helper
def module_name
# return module name for which method is being called
end
def new_module
name = module_name
define_method :initialize_module do
extend foo? ? Object.const_get("New#{name}") : Object.const_get("Old#{name}")
end
end
end
module A
extend Helper
new_module
module NewA
def some_method
'Successfully extended NewA'
end
end
module OldA
def some_method
'Successfully extended OldA'
end
end
end
class B
include A
def initialize
initialize_module
end
def foo?
true
end
end
class C
include A
def initialize
initialize_module
end
def foo?
false
end
end
B.new.some_method
#=> 'Successfully extended NewA'
C.new.some_method
#=> 'Successfully extended OldA'
【问题讨论】:
-
当你包含多个模块时怎么办?
-
你说得对,我已经更新了更具体的示例。
标签: ruby metaprogramming