Ruby Language
मॉड्यूल
खोज…
वाक्य - विन्यास
घोषणा
module Name; any ruby expressions; end
टिप्पणियों
रूबी में मॉड्यूल नाम निरंतर हैं, इसलिए उन्हें एक बड़े अक्षर से शुरू करना होगा।
module foo; end # Syntax error: class/module name must be CONSTANT
एक सरल मिश्रण में शामिल हैं
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
अब 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
विस्तार के साथ एक सरल मिश्रण
एक मिक्सिन सिर्फ एक मॉड्यूल है जिसे एक वर्ग में जोड़ा (मिश्रित) किया जा सकता है। इसे करने का एक तरीका विस्तार विधि के साथ है। 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!'