如果我有这门课:
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
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美元