2010-07-02 50 views
14

有什麼辦法可以做到這一點嗎?Ruby:使用Object.send來分配變量

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

回答

20
a.send(:c=, b.send(:c)) 

foo.bar = baz是不是跟一個分配方法bar調用 - 這是該方法bar=的調用。所以你需要告訴send調用該方法。

+0

你的意思是'bar ='。 – Adrian 2010-07-02 18:00:10

+0

@阿德里安:是的,我做到了。謝謝。 – sepp2k 2010-07-02 18:01:32

3

更改最後一行:

a.send(:c=, b.send(:c)) 
1

如果知道變量名稱預先

a.send(:c=, b.send(:c)) 

如果c是一個動態的變量,那麼你可以做這樣的

c = 'my_key' 
a.send("#{c}=", b.send(c))