在我在项目中使用的具有相同方法名称和不同返回值(带有模块名称的前缀)的示例模块(n 个数字)下方。
module Example1
def self.ex_method
'example1_with_'
end
end
module Example2
def self.ex_method
'example2_with_'
end
end
我尝试使用像#define_method 这样的元编程方式来实现这一点。但是,它不适合我。有什么办法吗?
array.each do |name|
Object.class_eval <<TES
module #{name}
def self.ex_method
"#{name.downcase}_with_"
end
end
TES
end
错误快照:你可以在最后一行看到它没有完成。
最佳答案
m = Object.const_set("Example1", Module.new)
#=> Example1
m.define_singleton_method("ex_method") { 'example1_with' }
#=> :ex_method
让我们来看看:
Example1.is_a? Module
#=> true
Example1.methods.include?(:ex_method)
#=> true
Example1.ex_method
#=> "example1_with"
关于ruby - 动态定义模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37154774/