我有一些类(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/