SORU
14 Ocak 2011, Cuma


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
14 Ocak 2011, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christian Atlas

    Christian At

    26 Mart 2009
  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007