Yarma bir Clojure birden fazla dosya üzerinde ad
Zamanından önce derleme :gen-class
ile yaparken birden fazla kaynak dosyaları üzerinde Clojure bir ad bölmek mümkün mü? Nasıl (:main true)
(defn- ...)
oyun haline geliyor?
CEVAP
Genel bakış
Kesinlikle, aslında clojure.core
bu yoldan ayrılalım ve kendi src/clj/clojure
bakarak takip edebilirsiniz iyi bir model sağlar ad:
core.clj
core_deftype.clj
core_print.clj
core_proxy.clj
..etc..
Tüm bu dosyalar clojure.core
tek bir ad alanı oluşturmak için katılın.
Birincil Dosya
Bunlardan biri birincil dosya, birisi bahseder zaman bulmuş olacak, böylece ad alanı adı eşleştirmek için bir :use
:require
adlı. Bu durumda ana dosya ns
bir form ile başlar clojure/core.clj
. Bu nereye koymak gerekirtümad yapılandırma, onlara gereken ne olursa olsun. Bu normalde de :gen-class
içerir, bu yüzden:
(ns my.lib.of.excellence
(:use [clojure.java.io :as io :only [reader]])
(:gen-class :main true))
Sonra birincil dosyasında uygun yerlere (tüm sonunda en sık) load
yardımcı dosyalarınızı getirmek için kullanın. clojure.core
bu gibi görünüyor:
(load "core_proxy")
(load "core_print")
(load "genclass")
(load "core_deftype")
(load "core/protocols")
(load "gvec")
Ne .clj
soneki ister bir önek olarak geçerli dizin gerekmez, unutmayın.
Yardımcı dosyalar
Yardımcı dosyaların her yardım ediyorlar hangi ilan ederek başlamak lazım ama çok in-ns
fonksiyon kullanarak yapmak gerekir. Yukarıdaki örnekte, ad alanı için yardımcı dosyalar ile başlamak istiyorum:
(in-ns 'my.lib.of.excellence)
Hepsi bu kadar.
gen-sınıfı
Tüm bu dosyaları tek bir ad yapı olduğu için her birincil veya yardımcı dosyalardan birinde olabilir işlevi tanımlayın. Tabii bu istediğiniz herhangi bir dosyasında: gen-class
fonksiyonları tanımlamak anlamına gelir
(defn -main [& args]
...)
Clojure emri tanımı kuralları hala tüm işlevler için de geçerlidir normal, emin dosya ne yapmanız gerektiğini unutmayıntanımlarbir işlev için denemeden önce yüklenirkullanınbu işlev.
Özel Vars
Ayrıca ad-özel bir işlevi tanımlayan (defn- foo ...)
ilgili form sordu. Fonksiyonları tanımlanmış gibi bu gibi diğer :private
vars görünür içinden ad nerede olduklarını tanımlanan, birincil ve tüm dosyaları yardımcı olacak erişim için özel değişkenleri tanımlanmış herhangi bir dosya yüklü şimdiye kadar.
Nasıl birden fazla dosya üzerinde djan...
Birden fazla dosya üzerinde Javascript...
Nasıl birden fazla dosya izlemek, ama ...
Gıt ile değişen birden fazla dosya tek...
Zaten diskten silinmiş bir Git repo çı...