:require, :use, etc. The syntax of those isn't as well documented as I'd like though in the API documentation.Stack Overflow again comes to the rescue with some good answers, distinguishing between using
:use versus :require.The syntax is easily understood by an example, like so:
(ns example-namespace.core
(:gen-class)
(:require [incanter
[core :as i.c :only [col-names sel $ dim]]
[io :as i.io :only read-dataset]]
[mmemail.core :as mail]
[clojure.contrib
[seq :as c.c.seq :only positions]
[except :as c.c.except :only throwf]
[json :as c.c.json :only read-json]
[command-line :as c.c.cmd :only with-command-line]])):use and :require has the same syntax, except the :as short-namespace-name is useless for :use since :use allows you access to the functions in that namespace without qualifying which namespace it's from.The
:only function-name and :only [fun1 fun2] parts says only the specified functions are being used in this namespace from the specified namespace.The
[package.name class1 class2] or alternatively [package.name [class1 :only fun1] [class2 :only fun2]] tells us which "classes" or specific namespaces are being used from the specified package of namespaces.You need
:gen-class if you want to one day compile and package your program for distribution as a Java jar.There's a subtlety with having namespaces or packages with a dash in it as in
example-namespace. See my previous post on namespaces for details.
No comments:
Post a Comment