如果我有这个类:
class A
attr_accessor :b,:c,:d
end
和这段代码:
a = A.new
h = {"b"=>10,"c"=>20,"d"=>30}
是否可以直接从散列初始化对象,而不需要遍历每一对并调用 instance_variable_set
?像这样的东西:
a = A.new(h)
这应该会导致每个实例变量被初始化为在散列中具有相同名称的变量。
最佳答案
你可以在你的类上定义一个初始化函数:
class A
attr_accessor :b,:c,:d
def initialize(h)
h.each {|k,v| public_send("#{k}=",v)}
end
end
或者您可以创建一个模块,然后“混合”
module HashConstructed
def initialize(h)
h.each {|k,v| public_send("#{k}=",v)}
end
end
class Foo
include HashConstructed
attr_accessor :foo, :bar
end
或者你可以尝试像constructor这样的东西
关于ruby - 有没有办法通过散列来初始化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572660/