루비 모듈

3830 단어 ruby
모듈은 메서드, 클래스 및 상수를 함께 그룹화하는 방법입니다. 모듈은 두 가지 주요 이점을 제공합니다.

Modules provide a namespace and prevent name clashes.

Modules implement the mixin facility.

모듈은 다른 메서드와 상수에 의해 영향을 받는 것에 대해 걱정할 필요 없이 메서드와 상수를 재생할 수 있는 샌드박스인 네임스페이스를 정의합니다.
통사론

module Identifier
   statement1
   statement2
   ...........
end


모듈 상수는 클래스 상수와 마찬가지로 이름이 처음 대문자로 지정됩니다. 메서드 정의도 비슷해 보입니다. 모듈 메서드는 클래스 메서드처럼 정의됩니다.

클래스 메서드와 마찬가지로 이름 앞에 모듈 이름과 마침표를 붙여 모듈 메서드를 호출하고 모듈 이름과 두 개의 콜론을 사용하여 상수를 참조합니다.
예시

#!/usr/bin/ruby

# Module defined in trig.rb file

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end


함수 이름은 같지만 기능이 다른 모듈을 하나 더 정의할 수 있습니다.

#!/usr/bin/ruby

# Module defined in moral.rb file

module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end


클래스 메서드와 마찬가지로 모듈에서 메서드를 정의할 때마다 모듈 이름, 마침표, 메서드 이름을 차례로 지정합니다.
Ruby require 문

require 문은 C 및 C++의 include 문과 Java의 import 문과 유사합니다. 세 번째 프로그램이 정의된 모듈을 사용하려는 경우 Ruby require 문을 사용하여 모듈 파일을 로드하면 됩니다.
통사론

파일 이름 필요

여기에서 파일 이름과 함께 .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를 사용하여 상대 디렉토리의 파일을 포함할 수 있습니다.

중요 - 여기에서 두 파일 모두 동일한 기능 이름을 포함합니다. 따라서 호출 프로그램에 포함하는 동안 코드 모호성이 발생하지만 모듈은 이러한 코드 모호성을 피하고 모듈 이름을 사용하여 적절한 함수를 호출할 수 있습니다.
Ruby include 문

클래스에 모듈을 포함할 수 있습니다. 클래스에 모듈을 포함하려면 클래스의 include 문을 사용합니다.
통사론

include modulename


모듈이 별도의 파일에 정의되어 있는 경우 클래스에 모듈을 포함하기 전에 require 문을 사용하여 해당 파일을 포함해야 합니다.
예시

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


이것은 다음 결과를 생성합니다 -

일요일
당신은 한 달에 4 주가 있습니다
1년에 52주가 있습니다.
일요일
120

루비의 믹스인

이 섹션을 진행하기 전에 객체 지향 개념에 대한 지식이 있다고 가정합니다.

클래스가 둘 이상의 상위 클래스에서 기능을 상속할 수 있는 경우 해당 클래스는 다중 상속을 표시해야 합니다.

Ruby는 다중 상속을 직접 지원하지 않지만 Ruby 모듈에는 또 다른 멋진 용도가 있습니다. 획일적으로 다중 상속의 필요성을 거의 제거하여 mixin이라는 기능을 제공합니다.

믹스인은 클래스에 기능을 추가하는 훌륭하게 제어되는 방법을 제공합니다. 그러나 믹스인의 코드가 이를 사용하는 클래스의 코드와 상호 작용하기 시작할 때 진정한 힘이 나옵니다.

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


모듈 A는 방법 a1과 a2로 구성됩니다. 모듈 B는 방법 b1과 b2로 구성됩니다. Sample 클래스에는 모듈 A와 B가 모두 포함되어 있습니다. Sample 클래스는 a1, a2, b1, b2의 네 가지 메서드에 모두 액세스할 수 있습니다. 따라서 Sample 클래스가 두 모듈 모두에서 상속되는 것을 볼 수 있습니다. 따라서 Sample 클래스가 다중 상속 또는 믹스인을 표시한다고 말할 수 있습니다.

좋은 웹페이지 즐겨찾기