命名空间 – 无法获得打印工作

Noob问题,使用Win7 64位,Clojure 1.2.0,Java 1.6.0_22

当我从命令行开始clojure时,pprint函数很容易获得.

user=> pprint
#<pprint$pprint clojure.pprint$pprint@16dfa45>
user=> (pprint "hi")
"hi"
nil
user=>

但是当我尝试使用文件中的pprint时,我会收到一个错误.这种情况发生在和没有命名空间(ns …:require …)的情况下,如pprint文档所示

clj文件如下:

(ns whatevah
(:require clojure.pprint))

(pprint "hi")

错误如下:

C:\Users\mischw\code\Clojure>java -cp ";c:\users\mischw\code\clojure\classes\*;c:\Program Files (x86)\Java\SWT;c:\users\mischw\code\clojure\classes\bookcode\*" clojure.main swinglearn.clj 
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: pprint in this context (swinglearn.clj:14)
... 21 more

Output completed (0 sec consumed) - Normal Termination

我不明白这里发生了什么的一般想法.为什么一个工作而不是另一个?这与命名空间有关吗?类路径?一些其他简单的修复?显然没有问题,但是我发现这是一系列的例子,我无法运行它们,尽管它似乎直接导入/使用/要求/包含它们.

你需要混合使用和/或导入.要求导致库被加载,并且其导出的每个公共符号将可访问,例如clojure.pprint / pprint.如果要使用像pprint一样更方便的名称,则需要引用命名空间.使用是“require,then refer”的一个方便的缩写,加载没有命名空间前缀的库.

user> (ns user (:require clojure.pprint))
nil
user> (pprint 1)
; Evaluation aborted.
user> (clojure.pprint/pprint 1)
1
nil
user> (ns user (:use clojure.pprint))
nil
user> (pprint 1)
1

编辑:不知道为什么它在REPL中为您工作.你可以看到,它对我来说不起作用.我想象你早期做了一些设置,使它工作,然后忘记了它,或者可能你有一些初始化脚本,在这个东西为你在REPL,但不是从文件加载.

http://stackoverflow.com/questions/5276675/cant-get-pprint-to-work-in-clojure

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:命名空间 – 无法获得打印工作