Ruby Language
रूबी में बंदर पैचिंग
खोज…
परिचय
मंकी पैचिंग रूबी में कक्षाओं को संशोधित और विस्तारित करने का एक तरीका है। मूल रूप से, आप रूबी में पहले से ही परिभाषित वर्गों को संशोधित कर सकते हैं, नए तरीकों को जोड़ सकते हैं और यहां तक कि पहले से परिभाषित तरीकों को संशोधित कर सकते हैं।
टिप्पणियों
उदाहरण के लिए रत्नों से, मौजूदा रूबी कोड के व्यवहार को बदलने के लिए अक्सर बंदर पैचिंग का उपयोग किया जाता है।
उदाहरण के लिए, यह देखें।
इसका उपयोग मौजूदा रूबी वर्गों को विस्तारित करने के लिए भी किया जा सकता है जैसे रेल्स एक्टिवसपोर्ट के साथ करता है, इसका एक उदाहरण है ।
किसी भी विधि को बदलना
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