`

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

阅读更多
初学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

分享到:
评论

相关推荐

    Programming Clojure 英文电子版

    你没看错 这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到... Programming Clojure shows you why these features are so important, and how you can use Clojure to build powerful programs quickly.

    Clojure编程乐趣

    Clojure is an opinionated language—it doesn’t try to cover all paradigms or provide every checklist bullet-point feature. Instead it provides the features needed to solve all kinds of real-world ...

    Professional.Clojure.1119267277

    Clojure is an open-source programming language maintained and supported by Cognitect., and quickly gaining use across industries at companies like Amazon, Walmart, Facebook, Netflix, and more....

    clojure eclipse

    clojure clojure clojureclojure clojure

    Practical Clojure.pdf

    Practical Clojure Clojure语言书籍

    clojure相关书籍1

    【1】[Clojure编程乐趣](The Joy of Clojure).pdf 【2】Clojure – Functional Programming for the JVM中文版.pdf 【3】Clojure Cookbook.pdf 【4】Clojure Data Analysis Cookbook.pdf 【5】clojure Hand book...

    Clojure(Script)库ClojureSchema.zip

    代码示例:(ns schema-examples  (:require [schema.core :as s  :include-macros true ;; cljs only  ])) (def Data  "A schema for a nested data type"  {:a {:b s/Str  :c s/Int}  :d...

    Clojure可选类型系统TypedClojure.zip

    Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...

    Clojure for the Brave and True

    Use Emacs for Clojure development, * Write macros to modify Clojure itself, * Use Clojure's tools to simplify concurrency and parallel programming, Clojure for the Brave and True assumes no prior ...

    Clojure编程乐趣]+clojure_programming.pdf

    Clojure编程乐趣和clojure_programming.pdf两本书

    Clojure电子书合集2(13本)

    [2013] Functional Programming Patterns in Scala and Clojure - Write Lean Programs for the JVM.(Michael Bevilacqua-Linn).[1937785475].pdf+epub.rar [2014] Clojure Cookbook - Recipes for Functional ...

    Clojure Cookbook

    Clojure Cookbook doesn't just teach you Clojure, it also shows you how to use the language and many of its common libraries. The most difficult part of mastering any language is knowing how to apply ...

    有关JAVA的译文 Clojure:“挑战”Java编程语言

    Clojure是一个JVM的动态函数式语言,最近发布了1.0版本,版本中Clojure提供了一个健壮的代码。Clojure是一套发展快速的新的编程语言,特别是,它为多核计算做了新的解决方案。在今后的软件设计中无论使用Clojure语言...

    Android代码-clojure

    The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10....

    clojure1.3.0及资料

    clojure1.3.0及资料,附《Programming Clojure》,《Practical Clojure》

    Clojure Data Analysis Cookbook

    Clojure Data Analysis Cookbook

    Mastering.Clojure.1785

    Learn to handle data using sequences, reducers, and transducers in Clojure Explore the lesser known and more advanced features, constructs, and methodologies of the Clojure language and its ecosystem,...

    Clojure电子书合集1(12本)

    [2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...

    Clojure入门教程.pdf

    Clojure入门教程

Global site tag (gtag.js) - Google Analytics