2012-04-16 11 views
8

मुझे प्रोग्रामिंग भाषा रूबी में एक अजीब समस्या मिली, यह एक बड़ी समस्या नहीं है, लेकिन मुझे समझ में नहीं आता कि ऐसा क्यों होता है। अगर कोई मेरी समस्या के लिए समस्या जानता है तो यह मुझे रूचि देगा।00.0 के समान नहीं है 0.0?

रूबी में आप 0 या 00 लिख सकते हैं, इससे कोई फर्क नहीं पड़ता, यह एक ही परिणाम के लिए आता है।
यदि आप 0 === 00 चलाते हैं तो आपको true भी मिलता है जिसका अर्थ है कि दो इनपुट बिल्कुल समान हैं।

0.0 भी 0 के बराबर होती है, इसलिए तार्किक 00.0 चाहिए भी बराबर 0.0 लेकिन समस्या यह है, है कि यदि आप नंबर 00.0 इस्तेमाल करने की कोशिश तो आप सिर्फ एक त्रुटि मिल जाएगा। आप उदाहरण के लिए चलाते हैं:

a = 00.0 

आपको यह त्रुटि प्राप्त:

syntax error, unexpected tINTEGER

बेशक

मैं जानता हूँ कि यह एक छोटी सी समस्या है, लेकिन क्यों कंप्यूटर नहीं है के रूप में कहा कि मैं समझता हूँ करना चाहते हैं 00.00.0 के समान व्यवहार करें?

+0

00.0 भी गणितीय रूप से वैध है? – texasbruce

+4

यह _mathematically_ वैध है। सवाल यह है कि अगर यह रूबी में वैध है। – Anthales

+1

मैं इसे सिर्फ एक टिप्पणी कर दूंगा, क्योंकि इसके लिए मेरे पास कोई ठोस आधार नहीं है। हालांकि, एक विचार यह है कि शायद रूबी थोड़ा स्तर पर 0 === 00 का मूल्यांकन करता है, लेकिन एक बार जब आप दशमलव जोड़ते हैं, तो मूल्यांकन फ्लोट के रूप में किया जाता है? किस बिंदु पर 00.0 एक कानूनी इनपुट नहीं है और शायद कुछ भी बराबर नहीं होगा, मुझे लगता है। – Colleen

उत्तर

4

बात यह है कि जब पार्सिंग और रूबी देखता है कि वर्ण 0 के साथ दो से अधिक अंकों के साथ एक संख्या शुरू होती है, तो यह इसे एक अंडाकार पूर्णांक संख्या के रूप में पार्स करती है। इस प्रकार, जब यह 00 पार्स करता है, तो यह ऑक्टल में 0 होता है जो दशमलव में 0 जैसा ही होता है। लेकिन अगर यह एक पाता है। तो यह एक अमान्य पूर्णांक है और यह वह त्रुटि है जो यह दिखाती है।

+0

असल में '00.' हिस्सा अभी भी ठीक है, रूबी इसे फिक्सनम (सिंगलटन) ऑब्जेक्ट '0' पर एक विधि आमंत्रण के रूप में मान रहा है, और इस अवधि के बाद विधि नाम के लिए वैध प्रतीक की अपेक्षा करता है। उदा।, '00.class # => Fixnum'। हालांकि, चूंकि अंतिम '0' मान्य प्रतीक नहीं है, इसलिए यह एक वाक्यविन्यास त्रुटि है। इसलिए त्रुटि संदेश (ओपी द्वारा प्रदान किया गया त्रुटि संदेश 'SyntaxError: no। फ़्लोटिंग शाब्दिक से अधिक समझ में आता है अब डॉट से पहले 0 डाल दिया गया है।')। –

1

मैंने कोशिश की "एक = 00.0" http://tryruby.com में, और मिल गया:

SyntaxError: no .<digit> floating literal anymore put 0 before dot. near line 1: "" 

जाहिर रूबी lexer नाव के उस रूप की उम्मीद नहीं है।

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