माणिक के बारे में ठंडी चीजों में से एक यह है कि आप तरीकों को कॉल कर सकते हैं और उन स्थानों पर कोड चला सकते हैं, जहां अन्य भाषाएं विधि या वर्ग परिभाषाओं में मौजूद हैं।
उदाहरण के लिए, एक वर्ग बनाने के लिए जिसमें एक अज्ञात सुपरक्लास होता है जब तक कि रन टाइम नहीं होता है, यानी रैंडम, आप निम्न कार्य कर सकते हैं:
class RandomSubclass < [Array, Hash, String, Fixnum, Float, TrueClass].sample
end
RandomSubclass.superclass # could output one of 6 different classes.
यह 1.9 का उपयोग करता है Array#sample
विधि (1.8.7-केवल, देखें Array#choice
) , और उदाहरण बहुत ही विपरीत है, लेकिन आप यहां शक्ति देख सकते हैं।
एक और अच्छा उदाहरण डिफ़ॉल्ट पैरामीटर मान रखने की क्षमता है जो गैर निश्चित हैं (जैसे अन्य भाषाएं अक्सर मांग करती हैं):
def do_something_at(something, at = Time.now)
# ...
end
बेशक पहले उदाहरण के साथ समस्या यह है कि इसका मूल्यांकन परिभाषा के समय पर किया जाता है, समय पर नहीं। इसलिए, एक बार एक सुपरक्लास चुने जाने के बाद, यह उस सुपरक्लास के शेष कार्यक्रम के लिए रहता है।
हालांकि, दूसरे उदाहरण में, हर बार जब आप कॉल करते हैं do_something_at
, तो at
चर वह समय होगा जब विधि को बुलाया गया था (ठीक है, इसके बहुत करीब)