You can just iterate over the keys and invoke the setters. I prefer this, because it will catch if you pass an invalid key.
class Foo
attr_accessor :name, :age, :email, :gender, :height
def initialize params = {}
params.each { |key, value| send "#{key}=", value }
end
end
foo = Foo.new name: 'Josh', age: 456
foo.name # => "Josh"
foo.age # => 456
foo.email # => nil
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…