2012-04-27 4 views
70

:refer:require में :only का उपयोग :use में :only का उपयोग करने से अधिक लाभ क्या है? क्या निम्नलिखित समानार्थी हैं?क्लोजर 1.4 में आवश्यकता के संदर्भ में उपयोग का क्या उपयोग है?

(ns so.example (:use [my.lib :only [function]])) 

और

(ns so.example (:require [my.lib :refer [function]])) 

उत्तर

80

:require को :refer जोड़ने का मुख्य विचार :use की पूरी तरह से छुटकारा पाने के लिए है, केवल एक ही ऑपरेटर छोड़ने अन्य पैकेज लोड करने के लिए। आप मौजूदा :use(:require [my.lib :refer :all]) के साथ अनुकरण कर सकते हैं ...

+0

मैं समझता हूं कि ': संदर्भ' हमें 'उपयोग' से छुटकारा पाने की अनुमति देता है, लेकिन क्या आप मुझे दस्तावेज़ीकरण के लिए इंगित कर सकते हैं जो इंगित करता है कि यह विचार था? मैं व्यक्तिगत रूप से सोचता हूं कि 'उपयोग' कुछ मामलों में सुविधाजनक है, जैसे 'clojure.test'। ऐसे मामलों में 'उपयोग' का उपयोग क्यों न करें? –

+10

http://dev.clojure.org/jira/browse/CLJ-879 देखें और क्लोजर-डे मेलिंग सूची में चर्चा से लिंक करें ... –

24

हाँ, वे बराबर हैं,

:refer और :require बुनियादी नामस्थान निर्माण करने के लिए आवश्यक कार्रवाई कर रहे हैं। :use अधिक convienient

  • :require का कारण बनता है वर्गों लोड करने के लिए
  • :refer नाम अंतरिक्ष में जो वास्तव में सिर्फ एक नक्शा है (वास्तव में नक्शे के एक जोड़े)
  • :use:refer + :require
है चीजों को जोड़ता है

उतना ही ऐसा दिख सकता है, वास्तव में नामस्थानों के लिए कोई जादू नहीं है

यदि आप बनाने के इस

(ns so.example (:use my.lib)) 

की तरह एक नाम स्थान के साथ बराबर: की आवश्यकता होगी:

(ns so.example (:require [my.lib :refer [function1 function2 function3 
             list every function in example 
             here and remember to keep it 
             up to date ]])) 
+1

तो क्यों 'संदर्भ' जोड़ा गया था? – Andrew

+0

इसका लगभग उपयोग किया जाता है: पैकेजों को संक्षिप्त नाम देने के लिए। ओह और यह पहले आया था। कॉल का उपयोग करें: देखें, संदर्भ का उपयोग नहीं करता है: –

+0

का उपयोग करें, मुझे अभी भी समझ में नहीं आ रहा है कि क्यों 'रेफर'': आवश्यकता 'में जोड़ा गया था। क्या समस्या हल हो गई है जो पहले से नहीं थी? – Andrew

0

1.4.0 रिलीज़ के अनुसार, अब उपयोग का उपयोग करने का कोई अच्छा कारण नहीं है। उपयोग की आवश्यकता है: इसके बजाय संदर्भित करें। क्लोजर 1.4.0 चेंजलॉग से: "आवश्यकताएं अब एक ले सकती हैं: संदर्भ विकल्प।: संदर्भ नामस्थान से संदर्भित करने के लिए प्रतीकों की एक सूची लेता है या: सभी सार्वजनिक वर्रों में लाने के लिए।" (https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html से)

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