2016-11-07 9 views
1

JRuby의 익명 클래스에서 부모 클래스 변수에 액세스하는 방법은 무엇입니까?
(정적 변수를 사용하지 않고)JRuby 익명 클래스

class MyJRubyClass 
    def initialize 
     @var1 = 1 
     @var2 = Class.new{ 
      def Method1 
       @var1 = @var1 + 1 
       print @var1 
      end 
      }.new 
     @var2.Method1() 
    end 
end 

감사합니다.

+0

일반 Ruby와 비슷합니까? 무슨 뜻인지 확실치 않아요, JRuby로 이식하려고하는 Java 개념처럼 들립니다. Java의 최상위에서 실행되기 때문입니다. – kares

+0

예, 그런 것입니다. –

답변

1

새로운 언어에 익숙해 지려면 항상 약간의 시간 (연습)이 필요합니다. '독점적 인'부모 클래스 액세스를 갖는 Java의 내부 클래스 개념은 Ruby에서 충분하지 않습니다.

OOP 스탠드 포인트에서 내부 클래스와 관련된 클래스에 유용하지만 메시지를 사용하여 객체를 "블랙 박스"로 협력해야하므로 축복을받지 못합니다. 이것은 루비의 접근 방식입니다.

반면에 Ruby는 리플렉션 API를 가졌으므로 아무 것도 숨기지 않습니다. 인스턴스 변수를 검색합니다 (이 예에서는 속성 판독기/기록기를 표시하는 것을 선호함).

class MyJRubyClass 
    attr_accessor :var1 
    def initialize 
    @var1 = 1 
    klass2 = Class.new do 
     def initialize(parent); @parent = parent end 
     def Method1 
     print @parent.var1 = @parent.var1 + 1 
     # without attr accessor : 
     #var1 = @parent.instance_variable_get(:@var1) 
     #@parent.instance_varialbe_set(:@var1, var1 + 1) 
     end 
    end 
    @var2 = klass2.new(self) 
    @var2.Method1() 
    end 
end