Latest web development tutorials

루비 모듈 (모듈)

모듈 (모듈) 방법, 수업에 대한 방법이며, 상수 방식을 결합했다. 모듈 (모듈) 두 가지 이점을 제공합니다.

  • 모듈네임 스페이스를제공하고 이름 충돌을 방지 할 수 있습니다.
  • 모듈믹스 인장치를 구현한다.

모듈 (모듈) 네임 스페이스, 샌드 박스에 해당하는 정의, 당신의 방법과 상수는 상수와 다른 곳에서 갈등의 방법은 아니다.

유사한 클래스를 모듈,하지만 다른 모습 :

  • 모듈은 인스턴스화 할 수 없습니다
  • 어떤 서브 클래스 모듈 없다
  • 모듈은 다른 모듈에 의해 정의 될 수있다

문법

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

당신이 모듈에서하는 방법을 정의 할 때 클래스 메소드와 마찬가지로, 당신은 점은 메소드 이름 다음에 후 점 다음에 모듈 이름을 지정할 수 있습니다.

루비는문을 필요로

문은 C 및 C ++과 유사 필요로하며, 자바 import 문에서 문을 포함한다. 당신이 모듈 중 하나를 사용하려면 타사 프로그램이 정의 된 경우, 당신은 단순히 모듈 파일을로드루비 문을필요로 사용할 수 있습니다 :

문법

require filename

여기에서, 파일 확장자는 필요하지.rb.

$ LOAD_PATH << '.'

'trig.rb을'필요
필요 '도덕적'

Y = Trig.sin (삼각 :: / 4 PI)
잘못 = Moral.sin (도덕적 :: VERY_BAD)

여기, 우리는$ LOAD_PATH를 << 사용 '.'루비는우리가 현재 디렉토리에 참조 된 파일을 검색해야 함을 알려주십시오. 당신이 $의 LOAD_PATH을 사용하지 않으려면, 당신은 상대 디렉토리의 파일을 참조require_relative 사용할 수 있습니다.

참고 : 여기에, 파일은 동일한 기능의 이름이 포함되어 있습니다.따라서, 호출 프로그램을 언급하지만,이 코드 모듈 난독 화를 피할 때 난독 초래할 것이며, 우리는 해당 함수를 호출하는 모듈의 이름을 사용할 수있다.

루비는문을 포함

당신은 클래스 모듈을 포함 할 수 있습니다. 클래스 모듈에 포함하기 위해, 당신은 당신의 클래스에 문을포함사용할 수 있습니다 :

문법

include modulename

만약 내장 모듈을 사용해야하기 전에요구되도록모듈이 별도의 파일로 정의 된 경우 문은 파일을 참조.

support.rb파일에 기록 된 다음 모듈 가정.

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   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

이것은 다음과 같은 결과를

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

유지 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
  • 모듈은 A1과 A2의 과정으로 구성되어있다.
  • 조성물 (B1) 및 (B2)의 방법에 의해 B 모듈.
  • 견본 클래스 모듈 A와 B를 포함
  • 샘플 클래스는, 즉, A1, A2, B1 및 B2, 네 가지 방법을 모두 액세스 할 수 있습니다.
  • 그래서 당신은 클래스 샘플은 두 개의 모듈을 상속 것을 볼 수있다, 당신은 클래스 샘플 다중 상속 또는믹스 인을 사용하여말할수있다.