खोज…


वाक्य - विन्यास

  • घोषणा

    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!'


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow