Подтвердить что ты не робот

Невозможно "использовать" в 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?

4b9b3361

Ответ 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.