2010-06-24 14 views
10

तो, मैं उत्सुक हूं कि रुबी पूरी तरह ऑब्जेक्ट उन्मुख भाषा कैसे है। मैं एक समस्या से ठोकर खा रहा हूं जो वास्तव में मेरे लिए स्पष्ट नहीं है।रूबी पूरी तरह ऑब्जेक्ट ओरिएंटेड कैसे है?

रूप

def foo(text) 
    print text 
end 

इस प्रकार अगर मैं एक समारोह को परिभाषित करने और मैं एक वर्ग के बाहर समारोह को परिभाषित, कैसे इस समारोह एक वस्तु है? मुझे एहसास है कि मैं

foo.class 

और मुझे नील क्लास मिल सकता है। क्या इसका मतलब यह है कि foo NilClass का एक उदाहरण है? और अगर ऐसा है, तो क्या यह वास्तव में क्या मतलब है जब मैं

foo "hello world" 

को कॉल करते हैं foo एक वस्तु है, क्या विधि मैं बुला जब मैं के रूप में ऊपर बयान कर रहा हूँ। इसके अलावा, अगर यह एक वस्तु, इसका मतलब यह है कि मैं इसे संशोधित करने और इसे करने के लिए एक और तरीका जोड़ने (जैसे कि बार) जहां मैं संभवतः निम्नलिखित बयान कर सकता है कर सकते हैं:

foo.bar(some variables) 

क्षमा करें, मैं पर बस थोड़ा भ्रमित कर रहा हूँ इस बिंदु। कोई स्पष्टीकरण बहुत सराहना की है! धन्यवाद!

+1

संभवतः डुप्लिकेट [रूबी में तरीके: ऑब्जेक्ट्स या नहीं?] (Http://stackoverflow.com/questions/2602340/methods-in-ruby-objects-or-not) – OscarRyz

उत्तर

12
  • उपयोगकर्ता परिभाषित वैश्विक कार्य (शीर्ष स्तर के कार्यों) Object के कहने तरीके हैं (भले ही self के वर्ग Object नहीं है)।
  • शीर्ष-स्तरीय विधियां हमेशा निजी होती हैं।
+2

ठीक है, यह समझ में आता है। तो कार्य वस्तुएं नहीं हैं, लेकिन ऑब्जेक्ट क्लास के निजी तरीके हैं। धन्यवाद! –

11

Wikipedia states के रूप में:

सभी तरीकों एक विशेष वस्तु के दायरे से बाहर परिभाषित वास्तव में वस्तु वर्ग के तरीके हैं।

रूबी वास्तव में "बहु-प्रतिमान" है। यह ऑब्जेक्ट उन्मुख, कार्यात्मक, अनिवार्य (और कुछ अन्य) प्रतिमानों का समर्थन करता है।

"पूरी तरह से ऑब्जेक्ट उन्मुख" होने का मतलब यह नहीं है कि आप केवल ऑब्जेक्ट-उन्मुख प्रतिमान का समर्थन करते हैं। जब तक आप ऑब्जेक्ट उन्मुख प्रोग्रामिंग (कक्षाएं, उदाहरण, बहुरूपता इत्यादि) बनाने वाली सभी सुविधाओं का समर्थन करते हैं, तब भी आप अतिरिक्त प्रतिमानों का समर्थन कर सकते हैं और फिर भी "पूरी ऑब्जेक्ट-ओरिएंटेड" हो सकते हैं।

+0

तो, क्या इसका मतलब है कि निम्नलिखित मान्य होगा: ओ = ऑब्जेक्ट.न्यू ओ.फू ?? (निश्चित रूप से foo ऑब्जेक्ट को परिभाषित करने के बाद) –

+0

और मैं समझता हूं कि "पूरी तरह ऑब्जेक्ट उन्मुख" का अर्थ है (कम से कम मुझे पूरा यकीन है), लेकिन क्या इसका अभी भी मतलब नहीं है कि सब कुछ एक वस्तु होना चाहिए। तो, मेरा सवाल यह नहीं है कि रूबी का प्रयोग विभिन्न प्रतिमानों के लिए किया जा सकता है, लेकिन किसी ऑब्जेक्ट परिप्रेक्ष्य से विधियों की वस्तुएं होती हैं और यदि ऐसा है, तो इसका क्या अर्थ है। –

+0

नहीं, वे नहीं हैं। देखें: http://stackoverflow.com/questions/2602340/methods-in-ruby-objects-or-not –

7

foo.class पहले कॉल विधि foo है, जो वस्तु पर nil देता है, और उसके बाद कॉल विधि classfoo से लौटे, अर्थात् nil

स्यूडोकोड अंकन में, कोड कदम-दर-कदम का मूल्यांकन:

foo.class 
==> { print text }.class 
==> { nil }.class 
==> nil.class 
==> NilClass 
0

न्याय की मिसाल पर विस्तार करने के लिए, आप आगे भी इस ले जा सकते हैं।

def foo 
    puts "foo" 
end 

foo.class 
==> NilClass 
NilClass.class 
==> Class 
Class.superclass 
==> Module 
Module.superclass 
==> Object 
Object.superclass 
==> BasicObject 

सबकुछ कम से कम कक्षा BasicObject का एक उदाहरण है।

+0

मेरी रूबी 1.8.7 'ऑइल' दिखाएं जब 'ऑब्जेक्ट.superclass' – ohho

2

आप एक वस्तु के रूप में एक विधि प्राप्त कर सकते हैं।अपने उदाहरण का उपयोग करने के लिए:

def foo(text) 
    print text 
end 

और फिर इसे उनका विस्तार:

method_as_object = method(:foo) 
method_as_object.call('bar') #=> bar 

आमतौर पर हालांकि, जब आप एक विधि को परिभाषित, तो आप सिर्फ यह (वर्तमान क्षेत्र का एक तरीका है जिसके डिफ़ॉल्ट रूप से है के रूप में परिभाषित वस्तु वर्ग)

0

< Is Class declaration an eyewash in ruby? Is everything really object oriented?>

लिंक के बाद सबसे अच्छा बताते हैं कि किस गहरे लाल रंग का पूरी तरह से इतना उन्मुख वस्तु इतनी है कि बुनियादी स्थिरांक वर्ग कुछ वर्गों जैसे खंड वस्तुएं वस्तुओं से वस्तुएं बना रहे हैं।

संबंधित मुद्दे