可能重复:
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
,但这是问题的提炼版本。
任何想法可能会出错?我似乎无法在其他任何地方找到问题
答案 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是解决这些问题的宝贵资源。