带有随机参数计数的 Ruby 调用构造函数

标签 ruby

我有一些类(class),例如

class Demo1 < Struct.new(:text, :text2) 
end
class Demo2 < Struct.new(:text, :text2, :text3) 
end

如果我只有参数的名称和哈希值,如何调用每个类的构造函数 我需要写这样的方法, 但这是错误的,因为在 send(:new,args) 结构之后将包含等于 args 的 :text

 def call_demo_object(demo_name, args={})
          demo_name.to_s.constantize.send(:new,args) 
  end

最重要的问题是使用散列中的随机参数调用构造函数

最佳答案

变体一:

def call_demo_object(demo_name, args={})
  z = [':new']
  args.keys.each do |key|
    z.push "args[:"+key.to_s+"]"
  end
  eval('demo_name.to_s.constantize.send(' + z.join(', ') +')' )
end

变体二:

def call_demo_object(demo_name, args={})
  a = demo_name.to_s.constantize.send(:new)
    args.each do |key, value|
      a[key] = value if a.members.include?(key)
    end
  a
end

关于带有随机参数计数的 Ruby 调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5565570/

相关文章:

javascript - Base64字符串在客户端压缩,在服务器端解压

ruby-on-rails - 在 Ruby on Rails 中使用网络摄像头

ruby - 从数组中选取随机元素

Ruby元编程,定义多个 "inherited"函数

ruby-on-rails - 如何在 Rails Controller 中使用闭包?

ruby-on-rails - 删除数组中的最后 2 个元素 - Ruby

ruby - 返回 ruby​​ 中字符串中所有出现的字符的索引

ruby-on-rails - 如何最好地表示 Rails 应用程序数据库中的角色?

ruby-on-rails - 模型中包含的模块的未初始化常量

ruby - "expect(9).to be > 6"如何是有效的表达?