如何使用对象参数数组来设置值
问题描述:
我有两个对象之间共享的参数数组。如何使用对象参数数组来设置值
attributes = [:name, :category, :value]
第一个对象已经设置了这些参数。我想将这些相同的值传递给第二个对象。
我该怎么做?
我最初的想法是使用:
attributes.each do |attribute|
@object_2.(attribute) = object_1.(attribute)
end
我也试图把属性变量“#{属性冲”里面,但它仍然没有奏效。
我已经尝试了许多不同的解决方案,没有任何帮助,并且在过去的一个小时内用谷歌搜索答案没有帮助。
一些结果似乎表明我可以用send()方法完成我正在寻找的东西,但是我尝试使用它并没有帮助。
attributes.each do |attribute|
@object_2.send(attribute) = object_1.send(attribute)
end
如果这个问题以前已经回答了(我无法找到通过广泛的搜索解决方案),请点我朝着一个解决方案。
谢谢。
答
attributes.each do |attribute|
@object_2.send("#{attribute}=", object_1.send(attribute))
end
答
@object_2.attributes = object_1.attributes
答
你可能在你的最后一次尝试接近,假设你已经宣布attr_accessor
在各自的类中的所有属性(ES):
attributes.each do |attribute|
setter = (attribute.to_s + '=').to_sym
@object_2.send(setter, object_1.send(attribute))
end
的.to_sym
是可选的,我只是喜欢在内省时使用符号。
也有办法做到这一点,而无需通过attr_accessor
暴露的实例变量(目前还不清楚是否需要一个)
答
这仅仅是一个有关如何,这也可以做到提示:
class Fred
def initialize(p1 = nil, p2 = nil)
@a, @b = p1, p2
end
def show
p [@a,@b]
end
end
f1 = Fred.new(10,11)
f2 = Fred.new
f1.instance_variables.each do |v|
f2.instance_variable_set(v,f1.instance_variable_get(v))
end
f2.show #=>[10, 11
如果您只想分配一些选定的实例变量,而不是全部,您也可以用attributes
替换f1.instance_variables
。
看起来像它的工作,谢谢。 – Kirk 2013-05-06 07:54:53