2009-07-22 31 views
12

मेरे पास .clj में सहेजे गए कार्यों का एक सेट है।मुझे क्लोजर फ़ाइलों की आवश्यकता और प्रदान करने की आवश्यकता कैसे है?

मैं फ़ंक्शंस का चयनित सेट कैसे प्रदान करूं और फिर इन फ़ंक्शंस को मेरी दूसरी फ़ाइल में आयात करूं?

उत्तर

24

आपके पास कुछ विकल्प हैं।

यदि यह सिर्फ आपकी फाइलों में एक फ़ाइल (पैकेज में नहीं) है, तो आप केवल load का उपयोग कर सकते हैं। अपनी फ़ाइल को "fun.clj" नामित किया गया था, तो आप सिर्फ विस्तार के बिना फ़ाइल का नाम का प्रयोग करेंगे:

(load "fun") 

(प्रदान की fun.clj अपने classpath पर था)। या

(load "files/fun") 

अगर यह अपने classpath पर लेकिन files निर्देशिका में नहीं था।

या आप load-file उपयोग करें और यह आपके फ़ाइल का स्थान दे सकते हैं:

(load-file "./files/fun.clj") 

आप उन्हें (उन्हें एक पैकेज में डाल) नाम स्थान चाहते थे, तो आप शुरुआत में ns मैक्रो डाल चाहते हैं अपनी फाइल के, इसे फिर से अपने क्लासपाथ पर रखें। फिर आप इसे use या require के माध्यम से लोड कर सकते हैं।

यहाँ डॉक्स कार्यों के लिए मैं का वर्णन किया है कर रहे हैं:

+0

मुझे खेद है, लेकिन मुझे अभी भी कुछ समस्या है। मेरे पास stopwords.clj और Autotag.clj नामक एक फ़ाइल है। मैं ऑटोटैग में स्टॉपवर्ड आयात करना चाहता हूं। जब मैं डालता हूं (लोड "स्टॉपवर्ड"), तो यह कहता है "क्लासपाथ पर stopwords__init.class या stopwords.clj का पता नहीं लगा सका:" भले ही मेरे पास एक ही फ़ोल्डर में स्टॉपवर्ड और ऑटोटैग है। मुझे खेद है, लेकिन मैं एक पूर्ण नौसिखिया हूँ। क्रिप्या मेरि सहायता करे। – unj2

+0

वर्तमान निर्देशिका शायद आपके क्लासपाथ पर नहीं है इसलिए क्लोजर इसे 'देख' नहीं सकता है। अपने क्लासपाथ पर कहीं भी stopwords.clj डालें (या अपने क्लासपाथ को "।" में शामिल करने के लिए बदलें)। – seth

+0

क्षमा करें, पता नहीं। यहां पर emacs उपयोगकर्ता। – seth

1

इसने मेरी समस्या हल की और मैंने यहां अनगिनत अन्य मुद्दों को देखा है, इसलिए मैं स्पष्टीकरण देना चाहता हूं।

Emacs (linux पर) में सबसे आसान तरीका है इस तरह कुछ करने के लिए है:

java -cp "lib/*":. clojure.main -e "(do (require 'swank.swank) (swank.swank/start-repl))" 

(नोट "lib/*" :.

एमएक्स -cp को तब आप उपयोग कर सकते दी इस उदाहरण के साथ कनेक्ट करने के लिए कीचड़ कनेक्ट करें।

पता नहीं है कि इसकी आवश्यकता है या नहीं, लेकिन मैंने पढ़ा है कि दोनों पक्षों पर क्लोजर, क्लोजर-कॉन्ट्रिब और स्वैंक-क्लोजर के समान संस्करण का उपयोग करना एक अच्छा विचार है।

आप "।" को स्वैंक-क्लोजर-क्लासपाथ को लेकर "emacs के अंदर पथ भी सेट कर सकते हैं।

2

"स्रोत" फ़ाइलों को लोड करने के अलावा, आप लीनिंगेन "चेकआउट निर्भरता" सुविधा का भी उपयोग कर सकते हैं। यदि आपके पास दो लीनिंग परियोजनाएं हैं, तो कहें, प्रोजेक्ट ए को बी (प्रदाता) की आवश्यकता है। प्रोजेक्ट ए की मूल निर्देशिका में, "चेकआउट" नामक निर्देशिका बनाएं। "/ चेकआउट" के अंदर परियोजना बी की मूल निर्देशिका के लिए एक प्रतीकात्मक लिंक बनाते हैं।

- project A 
    - project.clj 
    - checkouts 
    - symlink to project B 
    - src 
    - test 

परियोजना एक के project.clj में, में एक निर्भरता के रूप में परियोजना बी की घोषणा: खंड निर्भरता के रूप में अगर यह clojars.org में एक परियोजना थे। जैसे

(defproject project-a 
:dependencies [[org.clojure/clojure "1.5.1"] 
       [project-b "0.1.0"]]) 

बात यह है, तो आप परियोजना बी और प्रकार में जाना है:

lein install 

कि एक जार फ़ाइल में परियोजना बी की फ़ाइलें संकलन होगा, जो आपके ~/.m2 निर्देशिका में प्रदर्शित होगी , जो आपके स्थानीय clojars.org कैश की तरह है।

एक बार जब आप यह सब सेट अप, परियोजना एक के अपने * .clj src फ़ाइल (ओं) में, आप सामान्य तरीके से परियोजना बी फ़ाइलें "की आवश्यकता होती है" कर सकते हैं, जैसे कि यह clojars.org से थे:

(ns project-a.core 
    (:require [project-b.core :as pb]) 

इस तरह, आप कार्यों के लिए अपनी परियोजना-b.core में हमेशा की तरह इस तरह उल्लेख कर सकते हैं:

pb/myfunction1 

मेरी राय में, इस Leiningen परियोजनाओं के बीच पुस्तकालयों और डेटा साझा करने के एक बहुत अच्छा तरीका है प्रत्येक लीनिंगेन प्रोजेक्ट को स्वतंत्र, आत्मनिर्भर, और जितना संभव हो सके न्यूनतम रखने की कोशिश करते समय।

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