2009-03-28 17 views
27

अगर मुझे उलझन में आ रहा है, तो मुझे माफ़ कर दो, लेकिन मैं क्लोजर में शून्य के बारे में प्रलेखन द्वारा थोड़ा उलझन में हूं। यह कहता है:क्लोजर नील बनाम जावा नल?

शून्य के पास जावा नल के समान मूल्य है।

क्या इसका मतलब यह है कि वे एक ही चीज़ हैं या वे किसी भी तरह से अलग हैं? और क्या NullPointerException का मतलब है कि जावा नल का सामना करना पड़ा था या अगर मुझे नील का सामना करना पड़ा तो मुझे यह भी मिल जाएगा?

उत्तर

21

से Learning Clojure

"सबसे लिस्प बोलियों में, वहाँ जावा अशक्त बुलाया नहीं के बराबर करने के लिए एक मूल्य के अर्द्ध बराबर है। Clojure में, शून्य बस जावा के शून्य मान, कहानी का अंत है।"

चूंकि क्लोजर जावा बाइटकोड में संकलित करता है, ऐसा लगता है कि शून्य के किसी भी संदर्भ में अंतर्निहित JVM में केवल एक शून्य ऑब्जेक्ट संदर्भ है। क्लोजर निष्पादित करने से आपके एनपीई नील तक पहुंचने का परिणाम हैं।

+0

आवश्यक नहीं है। :-) मेरे पास ट्रेसबैक में जावा क्लास भी है। स्रोत कोड में इसे ट्रैक करने के लिए –

39

Clojure स्रोत कोड से, lang/LispReader.java:

static private Object interpretToken(String s) throws Exception{ 
    if(s.equals("nil")) 
     { 
     return null; 
     } 

lang/RT.java से:

static public void print(Object x, Writer w) throws Exception{ 
    { 
    ... 
    if(x == null) 
     w.write("nil"); 

तो nil अंतर्निहित मंच के null के लिए Clojure के प्रतिनिधित्व है। nil क्लोजर के लिए जावा स्रोत में कहीं और नहीं दिखाता है। nil और null के बीच एकमात्र अंतर यह है कि एक क्लोजर है और दूसरा जावा है, लेकिन वे अनिवार्य रूप से उपनाम हैं, जो क्लोजर से जावा से क्लोजर तक जाने पर पाठक और प्रिंटर द्वारा आवश्यक रूप से पीछे और पीछे परिवर्तित होते हैं।

हाँ, nilNullPointerException एस का कारण बन सकता है। किसी भी जावा विधि को nil पर कॉल करने का प्रयास करें, आपको एक एनपीई मिलेगा, उदा।

(.tostring nil) 

क्लोजर स्रोत कोड इस तरह की चीजों की बात करते समय पढ़ने के लिए बहुत आसान है, इसे एक नज़र दें।

+3

+1 – djhaskin987

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