*read-eval*
का मुख्य उद्देश्य पाठक को पढ़ने के समय अभिव्यक्ति का मूल्यांकन करने की अनुमति देना है, आमतौर पर उस चीज़ के लिए जिसमें शाब्दिक नोटेशन नहीं है। यदि *read-eval*
सत्य है (डिफ़ॉल्ट), read
और read-string
निम्न # = अभिव्यक्ति का मूल्यांकन करेगा। आप देख सकते हैं कि *print-dup*
सत्य होने के लिए उस सुविधा का उपयोग कैसे किया जाता है - जिसका अर्थ है कि आप मूल्यों को मुद्रित करना चाहते हैं कि उनके सटीक प्रकार संरक्षित हैं, इस स्थिति में आप कुछ मूल्यों को # = नोटेशन के साथ प्रिंट करेंगे। *print-dup*
के लिए डिफ़ॉल्ट गलत है - अधिकांश चीज़ों के लिए मानक क्लोजर नोटेशन ठीक है। उदाहरण के लिए, हम आम तौर पर इंटेजर्स और लॉन्ग के बीच भेद की परवाह नहीं करते हैं।
*read-eval*
सुविधा कोड लोड करने के लिए उपयोगी है, लेकिन अविश्वसनीय इनपुट के साथ उपयोग किए जाने पर यह सुरक्षा जोखिम पैदा करता है। क्लोजर 1.5 से पहले सामान्य सलाह उपयोगकर्ता इनपुट से निपटने पर *read-eval*
झूठ बोलना था। हालांकि, अभी भी जावा ऑब्जेक्ट्स पढ़ने के साथ कुछ समस्याएं थीं जो समस्याएं पैदा कर सकती हैं। यह क्लोजर 1.5 में तय है। सबसे महत्वपूर्ण बात यह है कि क्लोजर 1.5 ने पेश किया, clojure.edn/read
और clojure.edn/read-string
जो *read-eval*
सुविधाओं में से किसी का समर्थन नहीं करता है। वे ईडीएन प्रारूप द्वारा परिभाषित सामान्य क्लोजर मानों का प्रतिनिधित्व करने वाले उपयोगकर्ता इनपुट को पढ़ने के लिए सुरक्षित हैं। अधिक जानकारी के लिए http://edn-format.org देखें।
इसे @dAni समझाए जाने के लिए धन्यवाद! यह बहुत उपयोगी था। – murtaza52
'eval' लोगों को भ्रमित करेगा। मुद्दा यह है कि # * के बाद अभिव्यक्ति का मूल्यांकन किया जाता है जब '* read-eval *' सत्य होता है। Eval का उपयोग करने की कोई ज़रूरत नहीं है। – miner49r