खोज…


परिचय

मंकी पैचिंग रूबी में कक्षाओं को संशोधित और विस्तारित करने का एक तरीका है। मूल रूप से, आप रूबी में पहले से ही परिभाषित वर्गों को संशोधित कर सकते हैं, नए तरीकों को जोड़ सकते हैं और यहां तक कि पहले से परिभाषित तरीकों को संशोधित कर सकते हैं।

टिप्पणियों

उदाहरण के लिए रत्नों से, मौजूदा रूबी कोड के व्यवहार को बदलने के लिए अक्सर बंदर पैचिंग का उपयोग किया जाता है।

उदाहरण के लिए, यह देखें।

इसका उपयोग मौजूदा रूबी वर्गों को विस्तारित करने के लिए भी किया जा सकता है जैसे रेल्स एक्टिवसपोर्ट के साथ करता है, इसका एक उदाहरण है

किसी भी विधि को बदलना

def hello
  puts "Hello readers"
end

hello # => "Hello readers"

def hello
  puts "Hell riders"
end

hello # => "Hell riders"

मौजूदा रूबी विधि को बदलना

puts "Hello readers".reverse # => "sredaer olleH"

class String
  def reverse
    "Hell riders"
  end
end

puts "Hello readers".reverse # => "Hell riders"

मापदंडों के साथ एक विधि बदलना

आप जिस विधि को ओवरराइड करते हैं, ठीक उसी संदर्भ तक पहुँच सकते हैं।

class Boat
  def initialize(name)
    @name = name
  end

  def name
    @name
  end
end

puts Boat.new("Doat").name # => "Doat"

class Boat
  def name
    "⛵ #{@name} ⛵"
  end
end

puts Boat.new("Moat").name # => "⛵ Moat ⛵"

मौजूदा वर्ग का विस्तार

class String
  def fancy
    "~~~{#{self}}~~~"
  end
end

puts "Dorian".fancy # => "~~~{Dorian}~~~"

रिफाइनमेंट्स के साथ सुरक्षित बंदर पैचिंग

रूबी 2.0 के बाद से, रूबी शोधन के साथ बंदर बंदर को सुरक्षित रखने की अनुमति देता है। मूल रूप से यह बंदर पैच कोड को केवल तभी लागू करने की अनुमति देता है जब यह अनुरोध किया जाता है।

पहले हम एक मॉड्यूल में शोधन करते हैं:

module RefiningString
  refine String do
    def reverse
      "Hell riders"
    end
  end
end

फिर हम यह तय कर सकते हैं कि इसका उपयोग कहां किया जाए:

class AClassWithoutMP   
  def initialize(str)
    @str = str
  end
   
  def reverse
    @str.reverse
  end
end

class AClassWithMP
  using RefiningString

  def initialize(str)
    @str = str
  end
   
  def reverse
    str.reverse
  end
end

AClassWithoutMP.new("hello".reverse # => "olle"
AClassWithMP.new("hello").reverse # "Hell riders"


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