15

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

「use」メソッドが cljs.user 名前空間に存在しないと述べているようです。Clojurescript 自体は Clojure 式を評価できないため、この種のことは私には理にかなっています。ただし、Clojurescript には clojure.zip 名前空間があることはわかっているので、名前空間宣言で clojure.zip を として使用しました(:use [clojure.zip :only [insert-child]])

Clojurescript repl で Clojure.zip の Clojurescript バージョンを使用するにはどうすればよいですか?

4

1 に答える 1

26

ClojureScript の名前空間は Clojure とはまったく異なる方法で実装されるため、ClojureScript はuseorrequireフォームを直接サポートしていません。

代わりに、マクロを使用する必要があります。ns名前空間で使用するclojure.zipcljs.userは、次のようにします。

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

の ClojureScript バージョンでサポートされているフォームはns、Clojure でサポートされているフォームのサブセットであることに注意してください。具体的には、:use句はフォームを指定する必要があり、句はフォームを指定する必要があります。:only:require:as

于 2012-10-14T17:39:50.447 に答える