Ruby Language
モジュール
サーチ…
構文
宣言
module Name; any ruby expressions; end
備考
Rubyのモジュール名は定数なので、大文字で始める必要があります。
module foo; end # Syntax error: class/module name must be CONSTANT
シンプルなmixinとinclude
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
です。
ミックスインがクラスでどのように使用されるかは、それがどのように追加されるかによって異なります。
-
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は、クラスに追加(混合)できる単なるモジュールです。これを行う1つの方法はextendメソッドです。 extend
メソッドは、mixinのメソッドをクラスメソッドとして追加します。
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