2012-07-03 14 views
10

मैंने हाल ही में पाया है कि रूबी में गतिशील रूप से ऑब्जेक्ट और विधियां बनाना काफी काम है, यह जावास्क्रिप्ट में मेरे पृष्ठभूमि अनुभव की वजह से हो सकता है।रूबी में जावास्क्रिप्ट के रूप में ऑब्जेक्ट और इसकी विधियों को गतिशील रूप से कैसे बनाएं?

जावास्क्रिप्ट में आप गतिशील वस्तु बना सकते हैं और यह इस प्रकार के तरीकों है:

function somewhere_inside_my_code() { 
    foo = {}; 
    foo.bar = function() { /** do something **/ }; 
}; 

कैसे है (जैसा कि जावास्क्रिप्ट में सरल रूप में) रूबी में ऊपर बयान को पूरा करने के बराबर?

foo = Object.new 

def foo.bar 
    1+1 
end 
+1

जब आप रूबी प्रोग्राम करते हैं, तो शायद आपको अपने जेएस दृष्टिकोणों पर पोर्ट करने की कोशिश नहीं करनी चाहिए। भाषाओं में काफी अलग ऑब्जेक्ट मॉडल हैं, प्रतिमानों का एक मेल नहीं होगा। –

+0

यह सही है, याद दिलाने के लिए धन्यवाद। मुझे बस एक छोटी फेंक दूर वस्तु की आवश्यकता है जिसका उपयोग केवल मेरे ऐप में एक ही क्रिया के भीतर किया जाता है, और शायद मुख्य कारण यह है कि मैं इसे प्रक्रियात्मक तरीके से नहीं करना चाहता, बल्कि यह बदसूरत है। : डी –

+0

फिर आपको [ओपनस्ट्रक्चर] (http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html) देखना चाहिए। –

उत्तर

10

आप सिंगलटन तरीकों के साथ इस लक्ष्य को हासिल कर सकते हैं:

+0

ग्रेट उत्तर। मैंने इसे पहले देखा है, लेकिन किसी भी तरह से यह मेरे दिमाग को भी पार नहीं करता है, हाहाहा। धन्यवाद। :) –

4

आप ऐसा ही कुछ कर सकते हैं। ध्यान दें कि आप उदाहरण के लिए सभी वस्तुओं के साथ ऐसा कर सकते हैं कि,:

str = "I like cookies!" 

def str.piratize 
    self + " Arrrr!" 
end 

puts str.piratize 

जो होगा उत्पादन:

I like cookies! Arrrr! 

इन विधियों वास्तव में केवल इस एक वस्तु (इसलिए नाम) पर परिभाषित कर रहे हैं, इसलिए इस कोड (ऊपर कोड के बाद मार डाला):

undefined method `piratize' for "Cookies are great!":String (NoMethodError) 
:

str2 = "Cookies are great!" 
puts str2.piratize 

सिर्फ एक अपवाद फेंकता

3

आप OpenStruct: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html का प्रयास कर सकते हैं, यह किसी भी तरह से जावास्क्रिप्ट जैसा दिखता है, लेकिन केवल गुणों के साथ, विधियों के साथ नहीं। रूबी और जावास्क्रिप्ट ऑब्जेक्ट्स के लिए बहुत अलग विचारों का उपयोग करते हैं।