मैं github repo से कोड को समझने की कोशिश कर रहा हूं। यह ग्राहक स्थापित करने के लिए मणि का मुख्य मॉड्यूल है।मॉड्यूल `ClassMethods` को उसी नामस्थान में परिभाषित और विस्तारित क्यों किया गया?
module Github
# more code
class << self
def included(base)
base.extend ClassMethods # what would this be for?
end
def new(options = {}, &block)
Client.new(options, &block)
end
def method_missing(method_name, *args, &block)
if new.respond_to?(method_name)
new.send(method_name, *args, &block)
elsif configuration.respond_to?(method_name)
Github.configuration.send(method_name, *args, &block)
else
super
end
end
def respond_to?(method_name, include_private = false)
new.respond_to?(method_name, include_private) ||
configuration.respond_to?(method_name) ||
super(method_name, include_private)
end
end
module ClassMethods
def require_all(prefix, *libs)
libs.each do |lib|
require "#{File.join(prefix, lib)}"
end
end
# more methods ...
end
extend ClassMethods
require_all LIBDIR,
'authorization',
'validations',
'normalizer',
'parameter_filter',
'api',
'client',
'pagination',
'request',
'response',
'response_wrapper',
'error',
'mime_type',
'page_links',
'paged_request',
'page_iterator',
'params_hash'
end
- क्यों
class << self
औरmodule ClassMethods
इस्तेमाल किया है, और फिरclass << self
भाग में शामिल किए जाने के बजाय बढ़ा दिया? - कक्षा वर्ग
def included(base)
है। ऐसा लगता है कि वर्ग विधियों को एक विशिष्ट वस्तु में जोड़ना है। यह इस तरह क्यों है? यह कक्षा की कार्यक्षमता से संबंधित हो सकता है, लेकिन मुझे समझ में नहीं आता है।
समझ में आता है कि। मैं विधि 'self.included (आधार)' के बारे में थोड़ा उलझन में हूं, क्या आप शायद यह बता सकते हैं कि यह क्या है और यह मॉड्यूल 'एम' या कक्षा 'पी' –
से कैसे संबंधित है जब' पी 'कॉल' एम 'शामिल है, रूबी स्वचालित रूप से 'एम' पर 'शामिल' को कॉल करता है यदि इसे परिभाषित किया गया है। यह शामिल विधि का एक कॉलबैक है। इसका उपयोग मॉड्यूल की कक्षा विधियों को 'पी' पर बढ़ाने के लिए किया जाता है। देखें: http://ruby-doc.org/core-2.2.0/Module.html#method-i- शामिल – DGM
क्या कोई मौका है कि आप मुझे इसके व्यावहारिक उदाहरण के लिए इंगित कर सकते हैं? मैं अभी भी उन परिस्थितियों पर स्पष्ट नहीं हूं जिनके लिए इसका उपयोग किया जाएगा। मुझे यकीन है कि मुझे इसे सही एप्लिकेशन समझने के लिए एक व्यावहारिक उदाहरण देखने की आवश्यकता है। –