我有一个关于如何在运行时包含模块和执行方法的问题。我阅读了元编程,我想我已经有了基本观点,但我不明白如何在我的具体情况下使用它。Ruby和元编程和模块
例如: 我想基于块文本两种不同的方式
class TextGenerator
def create_text
if condition
create_full_text
else
create_short_text
end
end
private
def create_full_text
intro
middle
ending
end
def create_short_text
middle
end
def intro
"intro"
end
def middle
"middle"
end
def ending
"ending"
end
end
我想什么来实现的,我想提取方法的功能create_full_text和create_short_text到专用模块,如果条件匹配,则包括模块。文本创建将通过调用create_text从包含的模块中发生。
我的问题是可以理解的,也使这个想法有意义吗? 也许有人会把我推向正确的方向。
根据Sergios的回答,还有一种动态扩展方法。
相反的:
if condition
generator.extend(WithFullText)
else
generator.extend(WithShortText)
end
这将是巨大的,有像(非常基本的广泛为例):
@MODULES = {
full: "WithFullText",
short: "WithShortText"
}
def create_text_by_type(type)
module_name = @MODULES[type]
#no idea how this can work
module_class = getModuleByName(module_name)
generator.extend(module_class)
generator.create_text
end
最佳亚历
虽然技术上可行,但动态运行时实例修补很少是一个好主意。你想达到目的吗?或者这只是一次抛弃练习? –
这个编辑就是我所说的“它应该作为另一个问题”。我把你推向了正确的方向,对吧?所以原来的问题得到了回答。像这样的突变问题是不鼓励的。 –