关于clojure的ns中的require,use,import等

关于require

require只负责引入clojure库,不绑定函数到当前的ns中。
Clojure代码
;;引入java io,并指定缩略名为io
(require ‘[clojure.java.io :as io])
;;使用
(io/file “Filename”)

;;在ns中使用
(ns test
(:require [clojure.java.io :as io]))

关于refer

将函数绑定到当前的ns中。例如
Clojure代码
;;把trim和capitalize绑定到当前的ns中,可以直接调用这两个方法
(refer ‘clojure.string :only ‘[capitalize trim])

;;在ns中的写法
(ns test
(:refer clojure.string :only [capitalize trim]))

关于refer-clojure

从源码可以看出,就是调用了refer
Clojure代码
(defmacro refer-clojure
“Same as (refer ‘clojure.core )”
{:added “1.0”}
[& filters]
`(clojure.core/refer ‘~’clojure.core ~@filters))

关于use

引入并绑定,相当于require+refer。
Clojure代码
;;引入并绑定split方法,之后就可以直接使用了
(use ‘[clojure.string :only (split)])
;;直接在当前ns中使用split
(split “hello,world” #”,”)

;;在ns中的写法
(ns test
(:use [clojure.string :only (split)]))

关于import

和require相似,不过import负责引入java库,require负责引入clojure库。
Clojure代码
;;引入Clendar
(import [java.util Calendar])
;;使用
(Calendar/getInstance)

;;在ns中的写法
(ns test
(:import [java.util Calendar]))

use在函数名称没有冲突,而且函数很常用的情况下使用比较合适。
require对于怕有名称冲突的情况下使用比较合适。
import就是用来引入java库的。

关于gen-class的片面

除了以上这些函数,ns中的gen-class也常用到,其功能就是将clojure代码编译成java class。
比如要将clojure代码打包成可执行jar包,那么指定main class就可以用上。(gen-class还有很多功能,这只是最常用的一个)
Clojure代码
(ns test
(:gen-class))
(defn -main [] (println “Hello, World!”))

;;编译之后,在shell中执行,打印hello, world!
java test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值