2012-09-13 2 views
-3

I은 ​​할루비 스크립트에서 모듈을 상속하려면 어떻게해야합니까?

ABC (폴더) def.rb ----> abc.rb,

DEF (폴더) ----> a1.rb,

b1.rb 같은 계층

GHI (폴더) ----> x1.rb, y1.rb

abc.rb에있는 모듈 인 def.rb를 상속하거나 include하고 싶습니다. 그리고 나서 a1이 abc.rb를 상속해야합니다. def.rb에 정의 된 모든 메소드에 액세스 할 수 있습니다.

지금은 모든 스크립트 파일에 def.rb를 포함하고 있지만이 작업을 원하지 않습니다. 난 그냥 수직으로 상속하고 싶다.

+0

무슨 문제가 있나요? 모듈을 다른 모듈에 포함 시키려면'require' /'require_relative' (마지막 것은 Ruby 1.9에서만 사용)를 사용하여 모듈 정의를 "보거나"단순히'Include ModuleName'을 호출하십시오. 이 문제가 어떤 문제인지 말할 수는 없습니다. – jdoe

+0

나는 내가 10 개의 다른 스크립트에 포함시킬 필요가있는 10 개의 모듈을 가지고있다. 그래서 나는 그것들 모두를 1 개의 스크립트에 포함시키고 그 스크립트를 다음에 포함시키기 만하면 쉽게 될 것이다. 그래서 우리는 이것을 할 어떤 방법이 있나. – SSP

답변

4

그것은

) ABC와 같은 네이밍 시스템에 대처하기 어렵다, 당신은 이렇게 할 수 있습니다. 의 당신이 모듈 ModuleTest::FilesModuleTest::Network이 상상하자 module_test에서

/network.rb

module ModuleTest 
    module Network 
     def network 
      puts 'hello from ModuleTest::Network#network' 
     end 
    end 
end 

것은 module_test에/files.rb

module ModuleTest 
    module Files 
     def files 
      puts 'hello from ModuleTest::Files#files' 
     end 
    end 
end 

당신은 같은 일부 ModuleTest::Base 클래스를 만들 수 있습니다 이 :

(210)

이 클래스는 당신이 가지고있는 모든 기능을 포함, 그래서에서 클래스를 상속 :

require 'module_test/base' 

class Foo < ModuleTest::Base 
end 

foo = Foo.new 
foo.network 
foo.files 

출력 :

이 이
>ruby -I. foo.rb 
hello from ModuleTest::Network#network 
hello from ModuleTest::Files#files 
0

내가 왜 당신이 이것을하고 싶어하는지 알 수 없기 때문에 나는 당신의 질문을 오해하고 있다고 생각한다. 그렇다면 지적 해주십시오. 삭제하겠습니다.

설명하는 프로세스가 작동합니다 (적어도 나를 위해 루비 1.9.3에서).

module Def 
    def method_from_def 
    puts "Method from Def" 
    end 
end 

class Abc 
    include Abc 
end 

class X < Abc 
end 

X.new.method_from_def #=> "Method from Def" 

요구 사항에 약간은 구체적 일 수 있지만 이미 이미 포함 된 스크립트를 '포함'할 수있는 경우가 있습니다. (기준이없는 복사 및 소스 파일에 붙여 넣 의미 '를 포함'.) 당신이 당신의 클래스 각각 10 개 모듈을 포함 할 경우

관련 문제