रूबी +
, -
, !
, ~
, &
और *
सहित कुछ एकल ऑपरेटरों, शामिल हैं। अन्य ऑपरेटरों के साथ आप इन्हें फिर से परिभाषित भी कर सकते हैं। ~
और !
के लिए आप बस def ~
और def !
कह सकते हैं क्योंकि उनके पास बाइनरी समकक्ष नहीं है (उदा। आप a!b
नहीं कह सकते हैं)।
-
के लिए
हालांकि और +
दोनों एक एकल, और एक द्विआधारी संस्करण (उदा a+b
और +a
दोनों मान्य हैं) है, इसलिए यदि आप एकल संस्करण आप def [email protected]
और def [email protected]
उपयोग करने के लिए फिर से परिभाषित करना चाहते हैं।
यह भी ध्यान रखें कि *
और &
का एक यूनरी संस्करण भी है, लेकिन उनके पास विशेष अर्थ हैं। *
के लिए यह सरणी को विभाजित करने के लिए जुड़ा हुआ है, और &
के लिए यह ऑब्जेक्ट को एक प्रो में परिवर्तित करने के लिए जुड़ा हुआ है, इसलिए यदि आप उनका उपयोग करना चाहते हैं तो आपको क्रमशः to_a
और to_proc
को फिर से परिभाषित करना होगा।
class SmileyString < String
def [email protected]
SmileyString.new(self + " :)")
end
def [email protected]
SmileyString.new(self + " :(")
end
def ~
SmileyString.new(self + " :~")
end
def !
SmileyString.new(self + " :!")
end
def to_proc
Proc.new { |a| SmileyString.new(self + " " + a) }
end
def to_a
[SmileyString.new(":("), self]
end
end
a = SmileyString.new("Hello")
p +a # => "Hello :)"
p ~a # => "Hello :~"
p *a # => [":(", "Hello"]
p !a # => "Hello :!"
p +~a # => "Hello :~ :)"
p *+!-~a # => [":(", "Hello :~ :(:! :)"]
p %w{:) :(}.map &a # => ["Hello :)", "Hello :("]
अपने उदाहरण में मॉड्यूल बस वस्तु के साथ कुछ नहीं कर रहा, उनका डिफ़ॉल्ट मान के साथ, एक एकल + ऑपरेटर को परिभाषित करता है (:
यहाँ एक और अधिक पूरा एकल ऑपरेटरों के सभी प्रकार दिखा उदाहरण है जो यूनरी प्लस के लिए एक आम व्यवहार है, 5
और +5
आमतौर पर एक ही चीज़ का मतलब है)। किसी भी वर्ग के साथ मिलाकर इसका मतलब यह होगा कि कक्षा को यूनरी प्लस ऑपरेटर का उपयोग करने के लिए तत्काल समर्थन मिलता है, जो कुछ भी नहीं करेगा।
उदाहरण के लिए (माणिक <=2.2
उपयोग करते हुए):
module M
def [email protected]
self
end
end
p +"Hello" # => NoMethodError: undefined method `[email protected]' for "Hello":String
class String
include M
end
p +"Hello" # => "Hello"
ध्यान दें कि इस उदाहरण में आपको लगता है कि [email protected]
विधि वर्ग से लापता है
ध्यान दें कि ऊपर के उदाहरण त्रुटि संदेश से स्पष्ट रूप से देख सकते हैं रूबी 2.3 से अलग होगा, क्योंकि यूनरी माइनस और प्लस को उस संस्करण के बाद स्ट्रिंग्स के लिए परिभाषित किया गया है, और वे मूल से एक जमे हुए और अपरिवर्तनीय स्ट्रिंग को वापस करने का संदर्भ देते हैं।
सभ्य स्पष्टीकरण, +1 –