首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在clojure中使用pprint

无法在clojure中使用pprint
EN

Stack Overflow用户
提问于 2011-03-12 02:08:51
回答 2查看 8.3K关注 0票数 18

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

当我从命令行启动clojure时,可以很容易地使用pprint函数。

代码语言:javascript
复制
user=> pprint
#<pprint$pprint clojure.pprint$pprint@16dfa45>
user=> (pprint "hi")
"hi"
nil
user=>

但是当我试图从一个文件中使用pprint时,我得到了一个错误。使用和不使用名称空间都会发生这种情况(ns...:需要...)如pprint文档所示

clj文件如下:

代码语言:javascript
复制
(ns whatevah
(:require clojure.pprint))

(pprint "hi")

错误如下:

代码语言:javascript
复制
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

我不明白这里发生了什么。为什么其中一个可以工作,而另一个不行?这与名称空间有关吗?类路径?还有其他简单的解决方法吗?显然是菜鸟问题,但我发现这发生在一堆例子中…我无法运行它们,即使导入/使用/要求/包含它们似乎很简单。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-12 02:17:55

你把requireuse和/或import搞混了。require会导致库被加载,并且它导出的每个公共符号都可以像clojure.pprint/pprint一样访问。如果您想使用一个更方便的名称,如pprint,则需要使用refer连接到名称空间。use是“要求,然后引用”的简写,用来加载库时不带名称空间前缀。

代码语言:javascript
复制
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中为你工作。如你所见,它对我不起作用。我想你之前做了一些设置,让它工作,然后忘记了它,或者你可能有一些init脚本,它在REPL中为你做这些事情,但不是在从文件加载时。

票数 26
EN

Stack Overflow用户

发布于 2017-11-17 18:37:16

这里有几个例子:

;;如何与:require和:use一起使用

代码语言:javascript
复制
;; :require 
(ns example.pprinter
    (:require [clojure.pprint :as pp]))

(def myname "John Smith")
(pp/pprint myname)

代码语言:javascript
复制
;; :use
(ns example.pprinter
    (:use clojure.pprint))

(def myname "John Smith")
(pprint myname)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5276675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档