2017-02-17 1 views
0

하나의 클래스로 구성된 하나의 클래스로 하나의 프로그램을 만들었지 만, 각 하위 클래스마다 하나씩 여러 프로그램으로 나누는 것이 더 조직적이라고 생각했습니다. 이것이 내 코드를 구성하는 더 좋은 방법일까요? 이것이 성능이나 다른 것에 영향을 줍니까?상속받은 다른 파일의 중첩 된 클래스

그리고이 코드를 두 개의 파일로 나누려면 어떻게해야합니까? 주 프로그램은 Texty 클래스를 가지며 다른 파일의 String 클래스를 어떻게 든 포함해야하지만 Ruby에는 클래스를 포함 할 수 없으므로 Texty에서 상속을 유지하는 동안이 작업을 어떻게 수행 할 수 있습니까? 그리고 다른 파일에서 인스턴스 변수 @inst_var에 어떻게 접근합니까?

class Texty 
    def initialize 
    @inst_var = 0 
    end 
    def texty_method 
    puts 'Bar' 
    end 
    class String < Texty 
    def output(string) 
     puts string 
    end 
    end 
end 

Texty::String.new.output('Foo') 
+0

그런 중첩 클래스는 Texty와 String 사이에 어떤 종류의 관계도 생성하지 않습니다. String 클래스를 가져 와서 (다른 이름을 선택한 경우) 자신의 파일에 넣고, 선언하기 바로 전에 Texty가 필요하며 지금 얻고있는 것과 동일한 결과를 유지할 수 있습니다. –

+0

음 ... Texty 네임 스페이스 외부에서 String을 참조하기 때문에 동일하지는 않지만 사진이 있다고 생각합니다. –

+0

이 방법으로 Texty의 인스턴스 변수에 계속 액세스 할 수 있습니까? (문자열에서) –

답변

0

코드를 여러 파일로 나눠서 개체를 사용하면 성능이 저하 될 수 있지만 거의 알려지지 않습니다.

클래스별로 프로그램을 분할하는 경우 레일 명명 규칙을 사용하는 것이 좋습니다.

TestClass - 메인 프로그램의 상단에 다음>test_class.rb

는 수행 require_relative 'test_class.rb'

0

은 다음과 같이 파일을 분할 시도하고 어떻게되는지.

texty/texty.rb에서 :

class Texty 
    def initialize(x) 
    @x = x 
    end 
end 

texty/string.rb에서 :

require_relative 'texty.rb' 

class Texty 
    class String < Texty 
    def test 
     puts @x 
    end 
    end 
end 

그런 다음 명령 줄에서 실행

$ ruby -r ./texty/string.rb -e "Texty::String.new(1).test" 

그것은 당신의 Texty::String 클래스는 상속을 나타내는, 1를 인쇄한다 t의 초기화 그는 @x 부모 클래스에서 ivar Texty.

관련 문제