簡體   English   中英

如何使用clojurescript repl評估宏

[英]how can macros be evaluated using the clojurescript repl

一旦瀏覽器連接到clojurescript repl,我以前無法從repl調用宏。 這個問題在過去讓我擺脫了clojurescript,更喜歡直接使用javascript。 基本上,我覺得cljs-repl有點蹩腳,我回到編譯/調試周期,在clojure中編寫代碼應該是從我們那里解放出來的。

在clojurescript中推送和測試代碼是否有任何良好的變通方法/工作流程? 特別是如果可以評估宏?

我的問題的一個例子是:

  1. 制作一個新的cljs項目

    lein new cljs-template blah

  2. 啟動服務器

    cd blah

    萊恩跑

  3. 運行web-repl

    lein trampoline cljsbuild repl-listen

  4. 有一個帶有標題的文件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]])

我不能在瀏覽器repl中使用defpartial ,因為它是一個宏。 我得到的錯誤是:

>> (crate.macros/defpartial [])
"Error evaluating:" (crate.macros/defpartial []) :as "crate.macros.defpartial.call(null,cljs.core.Vector.fromArray([]));\n"
#
TypeError: Cannot read property 'defpartial' of undefined

現在defpartial是一個非常有用的宏,沒有它,這是一個麻煩。

當我想在項目中使用:use-macros定義另一個宏時,我的問題變得更糟。 我無法在repl或瀏覽器中調試我寫的內容,大約半天后,我發現使用clj repl更快,使用macroexpand測試宏並將結果復制回到瀏覽器代表。 大約一天后,我有一個cljs宏工作,這不是很有趣。 這是大約6個月前。 我希望現在有更快的方法可以做到這一點。

為了在交互式會話期間加載宏w / bREPL,您需要首先在bREPL中明確評估ns表單。

即便如此,這有點令人討厭 - 一些工作已經掌握在主人手中以支持交互式宏觀擴展,但它需要更多的工作。 通過在啟動時分析源文件,W還有一些關於使bREPL更有用的想法。

今天我用cemerick / austin檢查了一下 :一個clojureScript瀏覽器-REPL,您可以無限制地使用和評估brepl中的宏,也就是說沒有先在bREPL中明確評估ns形式。 我在這個演示項目 core.async宏和自定義域宏中使用沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM