require,use&import in clojure

在clojure 1.4中,引用其它clojure包函数的方法

1. 全名引用

user=> (in-ns 'myapp)
#<Namespace myapp>
myapp=> (clojure.string/capitalize "abc")
"Abc"

2. 用require建alias

myapp=> (clojure.core/require '[clojure.core :as core])
nil
myapp=> (core/require ['clojure.string :as 'str])
nil
myapp=> (str/capitalize "a")
"A"

3.使用use

user=> (in-ns 'myapp)
#<Namespace myapp>
myapp=> (range 10)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: range in this context, compiling:(NO_SOURCE_PATH:2)
myapp=> (clojure.core/use 'clojure.core)
nil
myapp=> (range 10)
(0 1 2 3 4 5 6 7 8 9)

myapp=> (use 'clojure.string)
WARNING: replace already refers to: #'clojure.core/replace in namespace: myapp,being replaced by: #'clojure.string/replace
WARNING: reverse already refers to: #'clojure.core/reverse in namespace: myapp,being replaced by: #'clojure.string/reverse
nil
myapp=> (join \- [0 1 2])
"0-1-2"

use中可以使用两个参数:only :exclude

user=> (in-ns 'myapp)
#<Namespace myapp>
myapp=> (clojure.core/use '[clojure.core :only [use]])
nil
myapp=> (range 10)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: range in
 this context, compiling:(NO_SOURCE_PATH:3)
myapp=> (first [0 1 2])
CompilerException java.lang.RuntimeException: Unable to resolve symbol: first in
 this context, compiling:(NO_SOURCE_PATH:4)
myapp=> (clojure.core/use '[clojure.core :exclude [range]])
nil
myapp=> (first [0 1 2])
0
myapp=> (range 10)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: range in
 this context, compiling:(NO_SOURCE_PATH:7)

你可能感兴趣的:(clojure)