Ruby:使用Object.send分配变量

时间:2010-07-02 17:49:58

标签: ruby

有没有办法做这样的事情?

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)
            ^

3 个答案:

答案 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))