2009-06-15 3 views
1

나는이 같은 여러 가지 방법을 가지고있는 클래스 Foobutton_0_0, button_0_1, button_0_2, button_1_0 등 나는 다음과 같은 구문을 통해 다른 방법이 액세스 할 수 있도록하고 싶습니다배열 인덱스로 접근자를 교대로 액세스하는 방법은 무엇입니까?

: 내가 아는

foo.button[0][1] 
foo.button[1][2] 
# etc. 

나는 단지 @button 인스턴스 변수를 생성하고 모든 button_* 접근자를 반복하고 그런 식으로 추가 할 수 있습니다. 그러나 이는 다소 괴롭 히고 실제로 "루비 방법"을 따르지 않습니다.

이 문제에 대한 좀 더 간결하고 루비쉬 한 해결책이 있는지 궁금합니다 (아마도 method_missing을 사용하여)? 누구든지이 작업을 수행하는 더 좋은 방법을 알고 있습니까?

답변

3
class Foo 
    def button 
    Button.new(self) 
    end 
    def button_0_1 
    "zero-one" 
    end 
    def button_0_2 
    "zero-two" 
    end 

    private 
    class Button 
    def initialize(parent) 
     @parent   = parent 
     @first_dimension = nil 
    end 
    def [](index) 
     if @first_dimension.nil? 
     @first_dimension = index 
     self 
     else 
     @parent.send("button_#{@first_dimension}_#{index}") 
     end 
    end 
    end 
end 
puts Foo.new.button[0][1] 
puts Foo.new.button[0][2] 
+1

대신 클래스 푸에'method_missing'를 사용하는 (... 나는 도중에이 알아 냈어요,하지만 [] 누락 된 방법에 대한 새로운 방법을 호출하기 때문에 나는 대괄호에 박히) , 그냥 할 수 없어 def 버튼 돌아 가기 Button.new (자기) 끝 ? –

+0

예, 저는 method_missing이 필요 없습니다. 나는 당신의 제안으로 코드를 업데이트했다. 감사. –

관련 문제