2012-04-24 2 views
0

나는 높고 낮게 보였습니다. 그리고 어쩌면 저는 약간의 실천 밖에하지 못했지만, 다음과 같은 방법을 찾지 못하는 것 같습니다.Ruby의 문자열 별 액세스 멤버입니까?

문자열/기호가 있습니다 (예 : "a" 또는 :a). 클래스 B에는 데이터 멤버 @a이 포함되어 있습니다. 내가 쓴 것처럼

method c, :a 

과 같은 효과를 :

def method object_of_class_B, string_or_symbol_referencing_the_member 
    object_of_class_B.some_other_method string_or_symbol_referencing_the_member = 010 
end 

그래서 난 호출 할 수 있습니다 : 나는 그런 방식으로 멤버에 액세스하기 위해 찾고

c.a = 010 

수 누구든지 해결책의 방향으로 나를 가리 킵니까? 내가 배우는 과정에서 Ruby의 핵심 부분을 완전히 놓쳤는가?

답변

4

이 같은 setter 메소드를 호출 할 send을 사용할 수 있습니다 : 개체가 이미 속성에 대한 접근이없는

object_of_class_B.send("#{ string_or_symbol_referencing_the_member }=", 010) 
1

경우 개체에 instance_variable_set를 사용할 수 있습니다. 예를 들어

:

c = SomeClass.new 
c.instance_variable_set(:@a, 'new value') 
+0

은'A = '방법은 인스턴스 변수'@ A'를 설정하고, 다른 아무것도하지 않는 경우에만'c.a = '새로운 value''를 호출하는 것과 같은 효과를 갖는다. 예를 들어,'c'가 active record 객체라면, instance_variable_set을 사용하면 원하는 결과를 얻지 못할 것이다. – sepp2k

+0

두 번째 생각에도 불구하고, OP는 그가 인스턴스 변수 @a를 가지고 있다고 말했습니다. 그러니 절대 ... – sepp2k

+0

당신 말이 맞아요. @xuinkrbin은 그/그녀가 '손짓'을하는 수업에 익숙해야합니다. – Jamie