当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

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

发表于: 2014-05-15   作者:Aaron5   来源:转载   浏览次数:
摘要: 初学clojure的时候曾经对ns引入库的几个函数疑惑了一阵,所以将理解记在这里。 关于require require只负责引入clojure库,不绑定函数到当前的ns中。 ;;引入java io,并指定缩略名为io (require '[clojure.java.io :as io]) ;;使用 (io/file "Filename")
初学clojure的时候曾经对ns引入库的几个函数疑惑了一阵,所以将理解记在这里。

关于require

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

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


关于refer

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

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


关于refer-clojure

从源码可以看出,就是调用了refer
(defmacro refer-clojure
  "Same as (refer 'clojure.core <filters>)"
  {:added "1.0"}
  [& filters]
  `(clojure.core/refer '~'clojure.core ~@filters))


关于use

引入并绑定,相当于require+refer。
;;引入并绑定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库。
;;引入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还有很多功能,这只是最常用的一个)
(ns test
     (:gen-class))
(defn -main [] (println "Hello, World!"))

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

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、Python路径介绍 在python用import或者from...import来导入相应的模块。 模块其实就是一些函数和
Goal 1. Export data from the “pubs.dbo.authors” table to a new Excel file. 2. The name of th
Goal 1. Export data from the “pubs.dbo.authors” table to a new Excel file. 2. The name of th
在用ns2进行网络视频通信仿真的时候,先要为我们自己的ns2添加evalvid或者myevalvid框架。其中myeva
从Xcode 4.5以后,我们在Objective-C中使用NS_ENUM和NS_OPTIONS来定义一个枚举,以替代C语言枚举的
C/C++中 error C2712: Cannot use __try in functions that require object unwinding 我的解决办法
在安装 图像处理工具包 mahotas 后,在eclipse中尝试import mahotas时,出现Unresolved import错误
1.头文件 #include<lib/bsd-list.h> 2.初始化(宏定义) 1) 在链表节点中添加LIST_ENTRY结
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1007wucx/index.html 论 LOAD
用TP 集成支付宝账户绑定功能时碰上个问题 ORM 下有文件 config.class.php 直接import()后 发现里面
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号