केवल समय विधि क्रम मामलों विशुद्ध रूप से प्रक्रियात्मक कोड में है, और है कि आमतौर पर अदूरदर्शी है, दो तरीकों दिया:
def greet
puts "%s, Dave" % random_greeting
end
# If I try to use `greet` here, it'll raise a NoMethodError
def random_greeting
["Hello", "Bonjour", "Hallo"].sample
end
# I can use `greet` here, because `random_greeting` is now defiend
यह ठीक काम करेगा, जब तक आप का उपयोग करने के greet
random_greeting
से पहले परिभाषित किया गया है चाहता था,
class Doorman
def greet
puts "%s, Dave" % random_greeting
end
def random_greeting
["Hello", "Bonjour", "Hallo"].sample
end
end
Doorman.new.greet
एक तो, Doorman.new.greet
साथ किसी के मेहमानों का स्वागत कर सकते हैं एक कक्षा में व्यवहार लपेटकर द्वारा एक आवेदन bett मॉडल कर सकते हैं: जिस तरह से है कि सभी गैर तुच्छ कोड इस को हल करती है एक कक्षा में व्यवहार रैप करने के लिए है er (शायद आपके होटल कोड में विभिन्न ऑब्जेक्ट्स अलग-अलग बधाई देते हैं, उदाहरण के लिए) और यह main
नेमस्पेस को भी साफ रखता है।
main
रूबी में ऑब्जेक्ट में पहले से ही 114 विधियों को परिभाषित किया गया है, इसलिए अपने स्वयं के तरीकों को कक्षाओं में रखना बेहतर है जो आपके प्रोजेक्ट के मॉडल में अभिनेताओं या वस्तुओं का प्रतिनिधित्व करते हैं।
क्या आप प्रश्न में कहा करने के लिए इसके अलावा के बारे में एक वर्ग की इनिशियलाइज़ में, यह पूरी तरह संभव है:
class Doorman
def initialize
puts "%s, I'm a new Doorman instance" & random_greeting
end
def greet
"%s, Dave" % random_greeting
end
def random_greeting
["Hello", "Bonjour", "Hallo"].sample
end
end
हालांकि विधि random_greeting
परिभाषित नहीं है जब हम initailize
लिखते हैं, पूरी कक्षा initialize
से पहले परिभाषित किया गया है कभी भी कहा जाता है। फिर, कक्षाओं को लपेटकर, यह जीवन को आसान बनाता है, क्लीनर और इसका मतलब है कि चीजें encapsulated रहती हैं।
नोट गैर काम उदाहरण एक 'BEGIN' बयान जोड़कर कोड काम में ठोक जा सकता है: 'BEGIN {def myfunction2; "2 में" रखता है; अंत} '। – steenslag
@steenslag एक 'बेहतर' कथन जोड़ने का एक बेहतर तरीका होगा: 'END {myfunction}'। –