2010-07-02 18 views
14

Böyle bir şey yapmanın bir yolu var mı? yanlışlıklaRuby: değişkenleri atamak için Object.send kullanma

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) 

son satırı sonucu:

syntax error, unexpected '=', expecting $end 
a.send(:c) = b.send(:c) 
      ^

cevap

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

foo.bar = baz bir görev izledi yönteme bar bir çağrı değil - yönteme bar= yapılan bir çağrı bu. Bu nedenle, bu yöntemi çağırmak için send'a söylemeniz gerekir.

+0

gibi bunu yapabilir Bar = 'demek istiyorsun. – Adrian

+0

@Adrian: Evet, yaptım. Teşekkürler. – sepp2k

3

Değişim son satırı için: Eğer değişken adını biliyorsanız c ise

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

önceden

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

dinamik bir değişken o zaman bu

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