DRY方式将哈希值分配给对象

Sim*_*ola 10 ruby hash

我正在寻找一种优雅的方法将存储在Hash中的值分配给预先存在的对象.为了清楚起见,如果我有一个对象,说obj有两个属性,比如名称和年龄,我想分配来自哈希的这些值而不做类似的事情:

obj.name = hash[:name]
obj.age = hash[:age] 
Run Code Online (Sandbox Code Playgroud)

感谢您的关注.西蒙娜

rfu*_*duk 11

最好的办法可能就是简单地定义一个方法update_attributes,它采用哈希并在类的实例方法中进行.

扩展其他人的写作以及您似乎需要的内容我认为您最好的选择是:

hash.keys.each do |key|
  m = "#{key}="
  obj.send( m, hash[key] ) if obj.respond_to?( m )
end
Run Code Online (Sandbox Code Playgroud)

这将占:

  • 在任何时候都没有哈希中类的所有属性,并且
  • 哈希中的任意数量的键(不仅仅是:名称等)

  • 你也可以这样做:`hash.each do | key,value |`然后使用`value`而不是`hash [key]`. (2认同)