Clojure从文件导入java

时间:2012-10-15 05:23:01

标签: clojure

  

可能重复:
  Why does require in the ns form behave different from the require function

我正在涉足clojure并且遇到导入问题。来自REPL

clojure.core=>(import '(java.io FileReader))
clojure.core=>(import 'java.io.FileReader)
clojure.core=>(import java.io FileReader)

每个作品都很完美,但是从文件中只有以下作品:

(ns project.core
  (import java.io.FileReader))

这些都失败了

(ns project.core
  (import 'java.io.FileReader)) 

(ns project.core
  (import '(java.io FileReader))

出现以下错误:

ClassNotFoundException quote.java.io.FileReader  java.net.URLClassLoader$1.run (URLClassLoader.java:366)

ClassNotFoundException quote.(java.io FileReader)  java.net.URLClassLoader$1.run (URLClassLoader.java:366)

分别

实际上我需要导入的不只是java.io.FileReader,但这是问题的提炼版本。

任何想法可能会出错?我似乎无法在其他任何地方找到问题

1 个答案:

答案 0 :(得分:3)

解决方案是:

(ns project.core
  (:import [java.io FileReader BufferedReader FooBar]))

至于为什么这是必要的,ns宏接受几个指令,包括:import。由于宏的实现方式,它希望import指令的参数采用类似列表的形式 - 因此,[java.io ...]。顺便提一下,(java.io ...)这样的列表也可以正常工作。

有关如何使用ns的完整概述,请查看ClojureDocs页面:http://clojuredocs.org/clojure_core/clojure.core/ns。 ClojureDocs是解决这些问题的宝贵资源。