MRI implementation of gc.c में मैंने undef
नामक ऑब्जेक्ट देखा। undef
ऑब्जेक्ट क्या है? इसकी कक्षा क्या है? मैं इसे कैसे एक्सेस कर सकता हूं? क्या इसके लिए कोई उपयोगिता है?रूबी की "अनिश्चित" वस्तु क्या है?
उत्तर
यह मेरे हिस्से पर एक शिक्षित अनुमान है, शायद मैटज़ इस प्रश्न को किसी बिंदु पर देखेगा और हमें एक निश्चित उत्तर देगा, उम्मीद है कि यह इस दौरान होगा।
जैसा कि आप जानते होंगे, रूबी कम से कम शुरुआती शुरुआत में कुछ हद तक प्रभावित था (यही कारण है कि हमारे पास $ @ और $ _ आदि जैसे चर हैं)। पर्ल में undef
कीवर्ड/फ़ंक्शन है (उदाहरण के लिए यदि आप प्रारंभ किए बिना एक चर घोषित करते हैं - इसका मान अपरिभाषित है)। मैं कहूंगा, कि कुछ समय पहले रूबी में कुछ समान होना था (यानी वेरिएबल्स एक अनिर्धारित मूल्य प्राप्त करने में सक्षम होंगे)। हम इसके बारे में कैसे जानते हैं? जिस संदर्भ में यह पाया जाता है।
जैसा कि आप देख सकते हैं, यह टिप्पणी बताती है कि विभिन्न रूबी ऑब्जेक्ट्स के object_id
कैसे व्युत्पन्न होते हैं। उस पर कुछ विवरण here पाया जा सकता है। लेकिन, संक्षेप में हम निम्नलिखित पता:
false.object_id == 0
true.object_id == 2
nil.object_id == 4
यह वही टिप्पणी से पता चलता है और यह वास्तव में मामला है, आप खुले एक irb
सत्र दरार और खुद के लिए इसे बाहर की कोशिश कर सकते है। ऐसा लगता है कि undef
की तरह का एक object_id
6.
अब है चाहिए था, undef
वास्तव में रूबी में एक आरक्षित शब्द है, लेकिन यह एक विशेष वस्तु nil
, false
और true
की तरह, यह है नहीं है - के रूप में हम जानते हैं - एक एक विधि को परिभाषित करने के लिए इस्तेमाल किया गया कीवर्ड।
तो, अपने प्रश्न का उत्तर देने के लिए, undef
ऑब्जेक्ट नहीं है, इसमें कोई कक्षा नहीं है और आप इसे एक्सेस नहीं कर सकते हैं। उद्देश्य undef
सेवा करने के लिए था, इसके बजाय रुबी में nil
ऑब्जेक्ट द्वारा सेवा दी जा रही है जिसे हम आज जानते हैं। लेकिन, यह हमारे द्वारा खोजे जाने और पहेली को खोजने के लिए उत्सुकता के लिए समय की विरासत के रूप में कोड में रहा है।
मैंने पाया कि यह एक ऑब्जेक्ट नहीं है क्योंकि मैं 'ऑब्जेक्टस्पेस._id2ref (6) 'के साथ एक पुनर्प्राप्त नहीं कर सकता। यह [कई स्थानों] पर पाया जाता है (http://rxr.whitequark.org/mri/ident?i=Qundef), और [यहां] (http://rxr.whitequark.org/mri/source/include/ruby/ ruby.h # 352) इसे "प्लेसहोल्डर के लिए अपरिभाषित मान" के रूप में प्रस्तुत किया जाता है।वास्तव में, इसका उपयोग 0, -1, न्यूल इत्यादि के बजाय अपरिभाषित (या शून्य) मानों का प्रतिनिधित्व करने के लिए किया जाता है। किसी भी वैध रूबी ऑब्जेक्ट के साथ संघर्ष से बचने के लिए यह आवश्यक लगता है। एक अच्छा उदाहरण है [हटाए गए इंस्टेंस चर को अमान्य करें] (http://rxr.whitequark.org/mri/source/variable.c#1279)। –
और मूल्यों के बारे में आपके लिंक के लिए +1। धन्यवाद! :) –
उस आखिरी उदाहरण में मुझे ऐसा लगता है कि कुंडफ का उपयोग आवृत्ति चर के मान को ओवरराइट करने के लिए किया जा रहा है जिसे हटाया जा रहा है। यदि आप उस आवृत्ति चर को एक्सेस करने का प्रयास करते हैं तो रूबी को अपवाद फेंकने के लिए यह आवश्यक होना चाहिए। अगर वे क्यूनील का इस्तेमाल करते हैं तो मेरा अनुमान है कि आपको अपवाद नहीं मिलेगा, बल्कि बदले में वापस आने वाले व्यवहार के रूप में वापस आना होगा जो आपके इच्छित व्यवहार नहीं है। बहुत रोचक, मुझे इस बात को लेकर बहुत अच्छा लगा - अच्छा सवाल। – skorks
मुझे पूरा यकीन है कि यह एक अपरिभाषित चर का जिक्र कर रहा है (जैसा कि nil
के रूप में परिभाषित चर के विपरीत है)।
इस पर एक नज़र डालें:
def hello(object = 'World')
puts "Hello #{object}"
end
hello #=> 'Hello World'
hello 'stackoverflow' #=> 'Hello stackoverflow'
hello nil #=> 'Hello '
संपादित करें: अपने प्रश्न के लिए एक अधिक पूरा जवाब के साथ समाप्त करने के लिए। आप कभी भी उस undef
ऑब्जेक्ट तक पहुंचने में सक्षम नहीं होंगे। यह केवल विधि परिभाषा में मौजूद है, न कि उसके शरीर में। या तो यह एक डिफ़ॉल्ट मान से भरा हुआ है (जैसे ऊपर 'World'
) या आपको ArgumentError
मिलेगा क्योंकि आपने सभी विधि पैरामीटर निर्दिष्ट नहीं किए हैं।
- 1. रूबी जब वस्तु
- 2. Element.prototype क्यों अनिश्चित है?
- 3. एक वस्तु जो रूबी
- 4. गणक वस्तु क्या है?
- 5. प्रोग्रेसडिअलॉग में 'अनिश्चित' का अर्थ क्या है?
- 6. सब कुछ एक वस्तु में रूबी है?
- 7. chrome.browserAction.onClished क्यों अनिश्चित है?
- 8. क्या शून्य वस्तु वस्तु इसके लायक है?
- 9. रूबी में "&:" ऑपरेटर की कार्यक्षमता क्या है?
- 10. रूबी वस्तु # आईडी चेतावनी और सक्रिय रिकॉर्ड
- 11. एक धारावाहिक वस्तु क्या है?
- 12. की वस्तु अजगर
- 13. call_user_func के साथ वस्तु की वस्तु की विधि बुला
- 14. सरल वस्तु की पहचान
- 15. अस्थायी वस्तु कहां संग्रहीत की जाती है?
- 16. एक अनिश्चित प्रगतिबार
- 17. रूबी पाइथन से अधिक वस्तु-उन्मुख कैसे है?
- 18. रूबी में "$:" क्या है?
- 19. क्या सब कुछ अजगर की तरह अजगर में एक वस्तु है?
- 20. अनिश्चित अनंत अभिन्न प्रोग्राम की गणना कैसे करें
- 21. क्या कोई ऐसा मामला है जहां 'बचाव वस्तु' के माध्यम से रूबी "अपवाद" प्राप्त होगा?
- 22. रेल पर रूबी की सीमाएं क्या हैं?
- 23. क्या रूबी ने छोड़ दिया है (एन) सी # की तरह?
- 24. क्या रूबी में नल-स्ट्रीम की तरह कुछ है?
- 25. क्या रूबी में सी की तरह "मुख्य" विधि है?
- 26. रूबी में विधि नाम की अधिकतम लंबाई क्या है?
- 27. क्या रूबी ऑब्जेक्ट की कक्षा को बदलना संभव है?
- 28. रेल की विधि 'to_sym' पर रूबी क्या करती है?
- 29. क्या पीएचपी रूबी मणि बंडलर की तरह है?
- 30. रूबी की सॉर्ट विधि में क्या चल रहा है?
मुझे नहीं पता कि यह क्या है, लेकिन संभवतः यह किसी विधि को अपरिभाषित करने के लिए उपयोग की जाने वाली 'अपरिफ' विधि से संबंधित नहीं है। –
@ एंड्रयू ग्रिम, हाँ, मैं सहमत हूं! –