English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
모듈(Module)은 메서드, 클래스, 상수를 모아놓는 방법입니다. 모듈(Module)은 두 가지 큰 이점을 제공합니다.
모듈은이름 공간이름 충돌을 피합니다.
모듈은 믹신 장치.
모듈(Module)은 이름 공간을 정의하며, 그 안에서 메서드와 상수는 다른 지점의 메서드와 상수와 충돌하지 않습니다.
모듈은 클래스와 유사하지만 다음과 같은 차이가 있습니다:
모듈은 인스턴스화되지 않을 수 있습니다
모듈은 서브 클래스가 없습니다
모듈은 다른 모듈에 의해 정의될 수 있습니다
module Identifier statement1 statement2 ........... end
모듈 상수 이름은 클래스 상수 이름과 유사하게 대문자로 시작합니다. 메서드 정의는 비슷하게 보입니다: 모듈 메서드 정의는 클래스 메서드 정의와 유사합니다.
클래스 메서드와 마찬가지로, 클래스 메서드 이름 앞에 모듈 이름과 점을 추가하여 모듈 메서드를 호출할 수 있습니다. 모듈 이름과 두 개의 쌍점을 사용하여 상수를 참조할 수 있습니다.
#!/usr/bin/ruby # trig.rb 파일에서 정의된 모듈 module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
같은 이름의 함수 이름이지만 다른 기능을 가진 여러 모듈을 정의할 수 있습니다:
#!/usr/bin/ruby # moral.rb 파일에서 정의된 모듈 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
클래스 메서드와 마찬가지로, 모듈에서 메서드를 정의할 때, 모듈 이름 뒤에 점을 추가하고 메서드 이름을 적을 수 있습니다.
require 문은 C와 C++와 유사합니다++ Java의 import 문과 같이 제3자 프로그램이 어떤 정의된 모듈을 사용하려면 Ruby의 require 문을 사용할 수 있습니다. require 문장을 사용하여 모듈 파일을 로드합니다:
require filename
여기서 파일 확장명 .rb 필수가 아닙니다.
$LOAD_PATH << '.' require 'trig.rb' require 'moral' y = Trig.sin(Trig::PI/4) wrongdoing = Moral.sin(Moral::VERY_BAD)
여기서는 다음과 같이 사용합니다 $LOAD_PATH << '.' Ruby가 현재 디렉토리에서 참조된 파일을 검색해야 하는 것을 알게 해야 합니다. $LOAD_PATH를 사용하지 않고 싶다면, 다음과 같이 사용할 수 있습니다. require_relative 로 상대 경로에서 파일을 참조합니다.
주의:여기서 파일은 동일한 함수 이름을 가지고 있습니다. 따라서 이는 호출 프로그램에서 코드 흐림을 유발할 수 있지만, 모듈은 이러한 코드 흐림을 방지하고 적절한 함수를 호출할 수 있는 모듈 이름을 사용할 수 있습니다.
모듈을 클래스에 embed할 수 있도록, 클래스에서 include 문장:
include modulename
모듈이 별도의 파일에 정의되어 있다면, 모듈을 include하기 전에 require 문장이 파일을 참조합니다.
아래의 모듈이 support.rb 파일에.
module Week FIRST_DAY = "일요일" def Week.weeks_in_month puts "당신은 월에 네 주를 가지고 있습니다" end def Week.weeks_in_year puts "당신은 52 년에 주 수" end end
지금, 클래스에서 모듈을 다음과 같이 참조할 수 있습니다:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
그렇게 하면 다음과 같은 결과가 나타납니다:
일요일 당신은 월에 네 주를 가지고 있습니다 당신은 52 년에 주 수 일요일 120
이 장을 읽기 전에, 대면 객체 지향 개념에 대한 기본적인 이해가 필요합니다.
여러 부모 클래스에서 클래스 특성을 继承할 수 있는 클래스는 중복 继承으로 표시됩니다.
Ruby는 중복 继承를 직접 지원하지 않지만 Ruby의 모듈(Module)은 또 다른 기적적인 기능을 가지고 있습니다. 그것은 중복 继承의 필요성을 거의 없애고, 중복 继承의 대안으로 믹신 의 장치.
Ruby는 실제로 중복 继承 기제를 구현하지 않고 대신 mixin 기술을 대체로 사용합니다. 모듈을 클래스 정의에 include하면 모듈의 메서드가 클래스에 mix됩니다.
아래의 예제 코드를 보고 mixin에 대한 더 깊은 이해를 얻어보겠습니다.
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
Modul A는 메서드 a1 und a2 조성.
Modul B는 메서드 b1 b2 조성.
Klasse Sample enthält Module A und B.
Klasse Sample kann alle vier Methoden zugreifen, d.h. a1、a2、b1 b2。
따라서, Sie können sehen, dass die Klasse Sample zwei Module geerbt hat, Sie können sagen, dass die Klasse Sample mehrfache Vererbung verwendet oder 믹신 。