Ruby Language
모듈
수색…
통사론
선언
module Name; any ruby expressions; end
비고
루비의 모듈 이름은 상수이기 때문에 대문자로 시작해야합니다.
module foo; end # Syntax error: class/module name must be CONSTANT
간단한 mixin 포함
module SomeMixin
def foo
puts "foo!"
end
end
class Bar
include SomeMixin
def baz
puts "baz!"
end
end
b = Bar.new
b.baz # => "baz!"
b.foo # => "foo!"
# works thanks to the mixin
Now Bar
는 자체 방식과 SomeMixin
의 방식을 SomeMixin
입니다.
mixin이 클래스에서 어떻게 사용되는지는 그것이 어떻게 추가되는지에 따라 달라집니다 :
-
include
키워드는 클래스 컨텍스트에서 모듈 코드를 평가합니다 (예 : 메소드 정의는 클래스의 인스턴스에 대한 메소드가됩니다). -
extend
는 객체의 싱글 톤 클래스의 컨텍스트에서 모듈 코드를 평가합니다 (메서드는 확장 객체에서 직접 사용할 수 있음).
모듈을 네임 스페이스로 사용
모듈은 다른 모듈과 클래스를 포함 할 수 있습니다 :
module Namespace
module Child
class Foo; end
end # module Child
# Foo can now be accessed as:
#
Child::Foo
end # module Namespace
# Foo must now be accessed as:
#
Namespace::Child::Foo
확장 기능이있는 간단한 믹스 인
mixin은 클래스에 추가 (혼합) 할 수있는 모듈입니다. 이를 수행하는 한 가지 방법은 extends 메소드를 사용하는 것입니다. extend
방법은 클래스 메소드와 믹스 인 방법을 추가한다.
module SomeMixin
def foo
puts "foo!"
end
end
class Bar
extend SomeMixin
def baz
puts "baz!"
end
end
b = Bar.new
b.baz # => "baz!"
b.foo # NoMethodError, as the method was NOT added to the instance
Bar.foo # => "foo!"
# works only on the class itself
모듈과 수업 구성
모듈을 사용하여 컴포지션을 통해 더 복잡한 클래스를 작성할 수 있습니다. include ModuleName
지시문은 모듈의 메소드를 클래스에 통합합니다.
module Foo
def foo_method
puts 'foo_method called!'
end
end
module Bar
def bar_method
puts 'bar_method called!'
end
end
class Baz
include Foo
include Bar
def baz_method
puts 'baz_method called!'
end
end
Baz
에는 자체 메소드 외에도 Foo
와 Bar
메소드가 포함되어 있습니다.
new_baz = Baz.new
new_baz.baz_method #=> 'baz_method called!'
new_baz.bar_method #=> 'bar_method called!'
new_baz.foo_method #=> 'foo_method called!'
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow