我在 Clojurescript 命名空间中输入以下内容。
cljs.user> (use '[clojure.zip :only [insert-child]])
WARNING: Use of undeclared Var cljs.user/use at line 1
"Error evaluating:" (use (quote [clojure.zip :only [insert-child]])) :as "cljs.user.use.call(null,cljs.core.vec([\"\\uFDD1'clojure.zip\",\"\\uFDD0'only\",cljs.core.vec([\"\\uFDD1'insert-child\"])]));\n"
#<TypeError: Cannot call method 'call' of undefined>
TypeError: Cannot call method 'call' of undefined
at eval (eval at <anonymous> (http://localhost:3000/main.js:32728:147), <anonymous>:1:85)
at eval (eval at <anonymous> (http://localhost:3000/main.js:32728:147), <anonymous>:6:3)
at http://localhost:3000/main.js:32728:142
at evaluate_javascript (http://localhost:3000/main.js:32741:4)
at Object.callback (http://localhost:3000/main.js:32806:138)
at goog.messaging.AbstractChannel.deliver (http://localhost:3000/main.js:31059:13)
at goog.net.xpc.CrossPageChannel.deliver_ (http://localhost:3000/main.js:32164:14)
at Function.goog.net.xpc.NativeMessagingTransport.messageReceived_ (http://localhost:3000/main.js:31732:13)
at goog.events.Listener.handleEvent (http://localhost:3000/main.js:22590:26)
at Object.goog.events.fireListener (http://localhost:3000/main.js:22924:21)
nil
似乎表明 cljs.user 命名空间中不存在“use”方法。这对我来说是有意义的,因为 Clojurescript 本身无法评估 Clojure 表达式。但是,我知道 Clojurescript 有一个 clojure.zip 命名空间,我在命名空间声明中使用了 clojure.zip (:use [clojure.zip :only [insert-child]])
.
如何在 Clojurescript repl 中使用 clojure.zip 的 Clojurescript 版本?
最佳答案
由于 ClojureScript 命名空间的实现方式与 Clojure 完全不同,因此 ClojureScript 不直接支持 use
或 require
形式。
相反,您必须使用ns
宏。要在 cljs.user
命名空间中使用 clojure.zip
,只需执行以下操作:
(ns cljs.user (:use [clojure.zip :only [insert-child]]))
请注意,ns
的 ClojureScript 版本支持的表单是 Clojure 支持的表单的子集;具体来说,:use
子句必须指定 :only
形式,并且 :require
子句必须指定 >:as
形式。
关于clojure - clojurescript repl 中无法出现 "use",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879027/