Невозможно "использовать" в clojurescript repl
Я набираю следующее в пространстве имен 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. Для меня это имеет смысл, поскольку сам Clojurescript не может оценивать выражения Clojure. Однако я знаю, что Clojurescript имеет пространство имен clojure.zip, я использовал clojure.zip в объявлении пространства имен как (:use [clojure.zip :only [insert-child]])
.
Как использовать версию Clojurescript clojure.zip в реплике Clojurescript?
Ответы
Ответ 1
Поскольку пространства имен ClojureScript реализованы полностью иначе, чем Clojure, ClojureScript не поддерживает формы use
или require
.
Вместо этого вы должны использовать макрос ns
. Чтобы использовать clojure.zip
в пространстве имен cljs.user
, просто выполните следующие действия:
(ns cljs.user (:use [clojure.zip :only [insert-child]]))
Обратите внимание, что формы, поддерживаемые в версии ClojureScript ns
, являются подмножеством тех, которые поддерживаются в Clojure; в частности, предложения :use
должны указывать форму :only
, а предложение :require
должно указывать форму :as
.