一旦浏览器连接到 clojurescript repl,我以前无法从 repl 调用宏。这是一个过去让我放弃 clojurescript 的问题,我更喜欢直接使用 javascript。基本上,我觉得 cljs-repl 有点蹩脚,我又回到了编译/调试周期,在 clojure 中编写代码应该让我们从中解放出来。
在 clojurescript 中推送和测试代码是否有任何好的解决方法/工作流程?特别是如果可以评估宏?
我的问题的一个例子是:
创建一个新的 cljs 项目
lein new cljs-template 等等
启动服务器
光盘等等
来跑
运行 web-repl
lein trampoline cljsbuild repl-listen
有一个
src/blah/client/main.cljs
带有标题的文件
(ns blad.client.main (:require [noir.cljs.client.watcher :as watcher] [clojure.browser.repl :as repl] [crate.core :as crate]) (:use [jayq.core :only [$ append]]) (:use-macros [crate.macros :only [defpartial]]))
注意线(:use-macros [crate.macros :only [defpartial]])
我不能defpartial
在浏览器 repl 中使用,因为它是一个宏。我得到的错误是:
>> (crate.macros/defpartial []) “评估错误:” (crate.macros/defpartial []) :as “crate.macros.defpartial.call(null,cljs.core.Vector.fromArray([]));\n” # TypeError:无法读取未定义的属性“defpartial”
现在defpartial 是一个非常有用的宏,如果没有它,它会很麻烦。
当我想在项目中定义另一个宏时,我的问题变得更糟了:use-macros
。我根本无法调试我在 repl 或浏览器中写的内容,大约半天后,我发现使用 clj repl 更快,使用 macroexpand 测试宏,然后将结果复制回浏览器复制 大约一天后,我得到了一个 cljs 宏,它不是很有趣。这是大约 6 个月前的事了。我希望现在有一种更快的方法可以做到这一点。