इस स्क्रिप्टविधि नामित `मुख्य मॉड्यूल में hash` किसी वस्तु के` hash` विधि
def hash
puts "why?"
end
x = {}
x[[1,2]] = 42
यह आउटपुट
why?
/tmp/a.rb:6:in `hash': no implicit conversion of nil into Integer (TypeError)
from /tmp/a.rb:6:in `<main>'
निम्नलिखित ऐसा लगता है hash
समारोह लिपि में defned है कि यह देखते हुए ओवरराइड करता है उस मामले में Array#hash
ओवरराइडिंग। चूंकि मेरे hash
विधि का वापसी मूल्य nil
है और Integer
नहीं है, यह अपवाद फेंकता है। निम्न स्क्रिप्ट इस
puts [1,2,3].hash
def hash
puts "why?"
end
puts [1,2,3].hash
उत्पादन
-4165381473644269435
why?
/tmp/b.rb:6:in `hash': no implicit conversion of nil into Integer (TypeError)
from /tmp/b.rb:6:in `<main>'
मैं रूबी स्रोत कोड में देख कोशिश की लेकिन समझ नहीं सकता है कि ऐसा क्यों होता है पुष्टि करने के लिए लगता है। क्या यह व्यवहार दस्तावेज है?
मुझे यह व्यवहार नहीं मिल रहा है। 'कक्षा ऐरे; डीफ़ हैश; शून्य; समाप्त; समाप्त; रखता है [1,2,3] .शैश एक खाली रेखा प्रिंट करता है और मेरे लिए शून्य देता है। 'एक्स [[1,2]] = 1' अभी भी टाइप एरर उठाता है, लेकिन 'x [nil] = 1' ठीक काम करता है। वास्तव में विचित्र व्यवहार .. आप किस रूबी संस्करण पर हैं? मैं 2.3.1 –