2012-10-14 76 views
13

我在Clojurescript命名空間中輸入以下內容。不能在clojurescript repl中使用

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命名空間。這對我來說很有意義,因爲Clojurescript本身不能評估Clojure表達式。但是,我知道Clojurescript有一個clojure.zip命名空間,我在命名空間聲明中使用了clojure.zip,作爲(:use [clojure.zip :only [insert-child]])

如何在Clojurescript repl中使用Clojurescript版本的clojure.zip?

回答

24

由於ClojureScript命名空間與Clojure完全不同,ClojureScript不直接支持userequire表單。

取而代之,您需要必須使用ns宏。要在cljs.user命名空間中使用clojure.zip,那麼,只要做到以下幾點:

(ns cljs.user (:use [clojure.zip :only [insert-child]])) 

注意,在ns的ClojureScript版本支持的形式是用Clojure支持的子集;具體而言,:use條款必須指定:only表單,並且:require子句必須指定:as表單。

+0

只是一個負責人,我只是在2016年遇到了同樣的問題,試圖「(需要...)」在我的代碼中間的一些調試工具 –