10,"c"=>20,"d"=>30} 是否可以直接从-6ren">
gpt4 book ai didi

ruby - 有没有办法通过散列来初始化对象?

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:39 24 4
gpt4 key购买 nike

如果我有这个类:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com