2010-07-02 4 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

+0

@Adrian : 예, 했어요. 감사. – sepp2k

3

변경 마지막 줄에 : 당신이 변수 이름을 알고있는 경우 c 인 경우

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

미리

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

는 동적 변수는 다음이

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