जब आज कुछ rspec लेखन, मैं की तुलना की तारीख (और समय) नहीं के बराबर करने के लिए उदाहरणों के साथ कुछ अनपेक्षित व्यवहार बारे में जाना।रूबी में, शून्य के साथ समानता क्यों होती है ("Date.new == nil") शून्य वापस आती है?
[email protected] ~ $ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
[email protected] ~ $ irb
>> 1 == nil
=> false
>> "string" == nil
=> false
>> :sym == nil
=> false
>> false == nil
=> false
>> [] == nil
=> false
>> {} == nil
=> false
>> Proc.new {} == nil
=> false
अब तक तो अच्छा है, है ना: यहाँ कच्चे माणिक (कोई रेल या अन्य पुस्तकालयों) का उपयोग कर एक नमूना है?
>> Date.new === nil
=> false
वहाँ क्यों ऐसा होता है या क्यों इस व्यवहार वांछित है के रूप में किसी भी स्पष्टीकरण है:
>> Date.new == nil
=> nil
>> Time.new == nil
=> nil
तिथि का अपना === है, जो ठीक काम करता है को लागू करता है? == तुलनात्मक रूप से लागू किया गया प्रतीत होता है। ==, हालांकि उस पर दस्तावेज़ीकरण से कोई संकेत नहीं दिया गया है कि यह कभी भी शून्य नहीं होगा। इसका डिजाइन निर्णय क्या है?
अद्यतन! इस 1.9.2 में ऐसा नहीं है:
$ irb
ruby-1.9.2-p136 :001 > require 'date'
=> true
ruby-1.9.2-p136 :002 > Date.new == nil
=> false
ruby-1.9.2-p136 :003 > Time.new == nil
=> false
Fwiw, 1.8.7 (और possibily पहले) तुलना उदाहरण आप दे दी है में ArgumentError को जन्म देती है: >> 5 < "ला" ArgumentError: स्ट्रिंग के साथ Fixnum की तुलना में विफल रहा है (आईआरबी) से \t: 41: में '<' \t से (irb): 41 हालांकि, आपकी व्याख्या समझ में आती है, और ऐसा लगता है कि दिनांक # <=> को कभी भी अपडेट नहीं किया गया था (उद्देश्य पर? कौन जानता है!) वापसी के बदले उठाने के लिए। मुझे लगता है कि मेरा मुख्य गोमांस अब सभी (आमतौर पर) रूबी डॉक्स के साथ है जो इस व्यवहार का उल्लेख नहीं करते हैं: * http://ruby-doc.org/core/classes/Date.html#M000673 * http://ruby-doc.org/core/classes/Comparable.html –
(पृष्ठ पर 'शून्य' का कोई जिक्र नहीं) यहां आया क्योंकि मैं के माध्यम से [रूबी koans] (http मेरे रास्ते काम कर रहा हूँ: // rubykoans। com /) है, जो सवाल में शामिल हैं "यह बेहतर obj.nil उपयोग करने के लिए obj == शून्य # क्यों है? या?" मुझे उम्मीद है कि "शून्य" से बेहतर जवाब है क्योंकि यह कम छोटी है "। –