2014-11-04 2 views
0

에 대한 디렉토리와 파일을 구성하는 방법은 다음과 같이 수업을 : 나는 파일을 작성하는 경우 그것은 잘 작동중첩 클래스

require 'active_support/core_ext' 

class Shelf 
    def initialize 
    @books = {} 
    end 
    def book(code: code) 
    @books[code] if @books.has_key?(code) 
    @books = Book.new(code: code) 
    end 
end 

class Shelf::Book 
    def initialize(code: code) 
    @code = code 
    end 
end 

.

나는 두 개의 파일 shelf.rbshelf/book.rb으로 클래스를 구분합니다,하지만 난 shelf.rb에서 require_relative 'shelf/book'을 쓸 때 class Shelf이 아직 정의되지 않았기 때문에 그것은 실패합니다.

파일 및 디렉토리는 어떻게 구성해야합니까? 완전히 중첩 된 클래스를 사용하고 있습니까?

답변

1

클래스 정의가 없지만 프로그램/스크립트를 실행하는 데 사용되는 다른 파일을 작성할 수 있습니다. 당신은 *.rb 파일의 명명 규칙에 대한 shelf.rb

1

Read thisrequire 'shelf/book' 할 필요가 없습니다이 파일

require_relative 'shelf' 
require_relative 'shelf/book' 

#more code instructions 

의 상단에

. 그것은에 따르면 당신은 클래스 Shelf있는 경우 :

class Shelf 
end 

다음 파일 이름 shelf.rb을해야한다, 그리고 당신이라는 클래스가있는 경우 : Shelf::Book를, 다음의 과정이 선반 디렉토리 (이내이어야한다 이름 book.rb 파일 하지 제약 또는 선반 디렉토리에있는 것이 필수이지만, 다른 어떤 개발자가 쉽게 파일 book.rb) 찾을 수있을 것입니다 때문에 따라하는 것이 규칙입니다 :

class Shelf::Book 
end 

하지만, 문제는 그것을 위해, Shelf에, Shelf::Book을 필요로하는 방법 루비에 대한 Shelf 그것에 클래스가 이전되는 알 수 없습니다 때문에 당신이 Shelf 클래스 정의 내부 require_relative 'shelf/book'를 호출 할 필요가 있다는 것입니다. 당신이 상관없이 당신이 라인을 사용하는 곳의 오류가 발생하는 Shelf 클래스의 정의를 원하지 않는 경우

class Shelf 
    require_relative 'shelf/book' 
end 

:이처럼 require_relative 'shelf/book' 사항은 다음과 같이 당신에게 shelf/book.rb을 변경

class Shelf 
    class Book 
    def initialize(code: code) 
     @code = code 
    end 
    end 
end 

여기에 있기 때문에 루비는 클래스 Shelf를 생성/열어이 오류가 발생하지 않습니다

`': uninitialized constant Shelf (NameError)

+0

"당신은라는 이름의 클래스가있는 경우 : 선반 :: 책 , 파일 이름 book.rb는 ** 선반 디렉토리에서 **이어야합니다 ** "정말입니까? rubygem 웹 사이트에있는 예제 중 하나에서'require 'rdoc/data'메인 클래스 또는 모듈에 링크합니다. RDoc :: Data 경우처럼 보이지 않습니다. –

+0

@ AurélienBottazini : 물론 제약이 아니기 때문에 더 많은 것으로 간주됩니다. 국제 대회를 사용하는 좋은 습관. – Surya

+0

@ AurélienBottazini : 또한 OP가 묻는 내용을 읽어보십시오. * 파일 및 디렉토리는 어떻게 구성해야합니까? 아니면 중첩 된 클래스를 완전히 잘못된 방식으로 사용하고 있습니까? *. 질문은 파일 및 디렉토리를 구성하는 것에 대해 명확하게 질문하며 대답에서 그 점을 언급하지 않을 이유가 없습니다. – Surya