ruby - 动态定义模块

标签 ruby dynamic metaprogramming

在我在项目中使用的具有相同方法名称和不同返回值(带有模块名称的前缀)的示例模块(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

错误快照:你可以在最后一行看到它没有完成。

enter image description here

最佳答案

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/

相关文章:

ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB

ruby - 如何反转 ruby​​ 的包含函数

ruby - 动态创建一个没有命名空间的类

ruby - 未初始化的常量 AdminController

ruby - 需要一些 Ruby 语法的解释

ruby - 使用正则表达式从 Ruby 中的字符串中提取子字符串

java - 如何使文本从事件中动态化?

iphone - 使用 Xcode 的动态内容

javascript - 如何让Plotly.js监听刻度标签的点击事件?

python - 如何从当前 python 模块动态获取类集?