2012-09-09 3 views
4

Ruby를 처음 사용했습니다. 루비에서 상속을 사용하는 것과 관련하여 질문이 있습니다.Ruby에서 다중 파일 상속 사용

나는이 다른 파일 이름 puppy.rb

class Puppy < Doggy 
end 

puts Doggy.new.bark 

나는이 무엇입니까에서 강아지라는 이름의 또 다른 클래스를 작성했습니다 Doggy.rb

class Doggy 
    def bark 
    puts "Vicky is barking" 
    end 
end 

라는 이름의 파일 안에 도기로라는 클래스를 가지고 오류 :

Puppy.rb:1:in `<main>': uninitialized constant Doggy (NameError) 

이러한 파일 (Doggy 및 Puppy)을 하나의 파일 안에 두어야합니다. 그렇지? , 내가 필요로 사용하여 시도하고 require_relative이 표시,하지만 여전히 나는 다른 사람들이 말씀하신 것을 외에도,

Puppy.rb:1:in `<main>': uninitialized constant Doggy (NameError) 

    class Puppy < Doggy 
    end 
    require_relative 'Doggy.rb' 
    puts Doggy.new.bark 

답변

4

puppy.rb에서 수행해야 할 변경 작업은 다음과 같은 방식으로 파일을 요구합니다. 두 파일이 같은 디렉토리에 있다고 가정합니다.

doggy.rb

class Doggy 
    def bark 
    puts "Vicky is barking" 
    end 
end 

강아지.rb

require File.expand_path('../doggy.rb', __FILE__) 
class Puppy < Doggy 
end 

puts Doggy.new.bark 
+1

Ankit이 (가) 대단히 감사합니다. File.expand_path ('doggy.rb')뿐만 아니라 과 함께 File.expand_path ('../ doggy.rb', __FILE__)가 필요합니다. 그 차이점은 무엇입니까? – Pawan

+0

현재 시나리오에서 둘 다 똑같이 작동하지만, 하위 디렉토리에 필요한 파일이 있다면 아이디어를주고 싶습니다. 예를 들어'doggy.rb '가'animal/doggy.rb'에있는 경우'File.expand_path ('doggy.rb ')는 실패하고'File.expand_path ('../ animal/doggy. rb ', __FILE __)' – AnkitG

+0

File.expand_path가 아니라, 유닉스와 비슷한 시스템에서 윈도우 상응하는 모습이 확실하지 않다면'$ : <<'같은 것을 할 것입니다. – Cubic

1

또한 오류 아래 얻고 제안에 따라 경찰

을 편집

, puts Dog.new.bark 귀하의 클래스가 호출되지 않기 때문에 항상 실패합니다 , 그것의 도깨입니다. 조심하십시오.

1

아니요, Doggy이 선언 된 파일을 요구해야합니다. require 또는 require_relative을 사용할 수 있습니다.

그럼 어쨌든 Doggy이 아닌 Dog이 아닌 선언 된 이름을 사용해야합니다.

0

당신은 당신은 Puppy이 파일에서의 Doggy 클래스와 파일이 필요합니다 강아지 클래스 당신에

4

을 Doggy.rb을 포함해야합니다.

require_relative 'doggy' 

puppy.rb에서 (가정 파일 이름 doggy.rb 및 puppy.rb 있습니다) : 당신은 루비 1.9에있는 경우,

require './doggy' 

을 넣어 나.

1

Doggy, 의 정의를 포함하는 파일을 다음에로드하는 경우 Doggy에서 상속합니다. 물론 은 아마도을 처리 할 수 ​​없습니다. Doggy의 정의가 포함 된 파일 만 3 번줄에로드하는 경우 1 행에서 Doggy을 어떻게 상속받을 수 있습니까?