有没有办法做这样的事情?
a = Struct.new(:c).new(1)
b = Struct.new(:c).new(2)
a.send(:c)
=> 1
b.send(:c)
=> 2
a.send(:c) = b.send(:c)
最后一行导致错误:
syntax error, unexpected '=', expecting $end
a.send(:c) = b.send(:c)
^
答案 0 :(得分:23)
a.send(:c=, b.send(:c))
foo.bar = baz
不是对方法bar
的调用,后跟分配 - 它是对方法bar=
的调用。因此,您需要告诉send
调用该方法。
答案 1 :(得分:3)
将最后一行更改为:
a.send(:c=, b.send(:c))
答案 2 :(得分:2)
如果您事先知道变量名称
a.send(:c=, b.send(:c))
如果c
是动态变量,那么你就可以这样做
c = 'my_key'
a.send("#{c}=", b.send(c))