by Thomas Wieczorek - Januar 6th, 2012.
Filed under: Clojure, Namespaces.
Dies ist mein persönlicher Clojure Namespace Spickzettel.
Ausgangssituation: Ich habe die Funktion call-me
in der Datei dateiname.clj gespeichert. Je nachdem, wie ich require
, refer
und use
verwende, funktioniert der Aufruf von call-me verschieden.
Namespace deklarieren
; steht in dateiname.clj als erste Anweisung
(ns mein.namespace.dateiname) |
ns
bietet verschiedene Optionen. :require
und :use
funktionieren wie ihre Funktionen. Die Dokumentation empfiehlt die Optionen zu verwenden statt require, refer
und use.
(ns mein.namespace.woanders
(:require [clojure.contrib :as cc])
(:use [mein.namespace.dateiname :only [call-me]])) |
Namespace laden
; Aufruf: mein.namespace.dateiname/call-me
(require 'mein.namespace.dateiname) |
; Aufruf: d/call-me
(require '[mein.namespace.dateiname :as d]) |
Mehrere Namespaces laden
(require (clojure.contrib sql sql.tests)) |
Namespace laden & alle Symbole importieren
; Aufruf: call-me
(require 'mein.namespace.dateiname)
(refer 'mein.namespace.dateiname) |
use
kombiniert require
und refer
.
; Aufruf: call-me
(use 'mein.namespace.dateiname) |
Verschiedene Optionen
refer
und use
bieten die Optionen :exclude, :only, :rename
, um Symbole auszuschließen, nur bestimmte zu laden oder um geladene Symbole umzubenennen.