4

ブラウザがclojurescriptreplに接続されると、以前はreplからマクロを呼び出す方法がありませんでした。これは、過去にclojurescriptを延期し、javascriptを直接使用することを好む問題です。基本的に、cljs-replはちょっと足りないと感じ、clojureでコードを書くことで解放されるはずだったコンパイル/デバッグサイクルに戻りました。

clojurescriptでコードをプッシュおよびテストするための適切な回避策/ワークフローはありますか?特にマクロを評価できるのなら?

私の問題の例は次のとおりです。

  1. 新しいcljsプロジェクトを作成します

    lein new cljs-template blah

  2. サーバーを起動します

    cd blah

    ラインラン

  3. web-replを実行します

    leinトランポリンcljsbuildrepl-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]])

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を使用してそこでマクロをテストし、結果をコピーして戻す方が速いことがわかりました。ブラウザの担当者 約1日後に1つのcljsマクロが機能するようになりましたが、あまり面白くありませんでした。これは約6ヶ月前のことです。私は今これを行うためのより速い方法があることを望んでいます。

4

2 に答える 2

6

bREPLを使用した対話型セッション中にマクロをロードするには、最初にbREPLのns形式を明示的に評価する必要があります。

それでも、これは少し面倒です。インタラクティブなマクロ拡張をサポートするためにマスターに着陸した作業もありますが、さらに作業が必要です。Wには、起動時にソースファイルの分析を行うことで、bREPLをより便利にするためのアイデアもいくつかあります。

于 2012-09-11T16:13:12.477 に答える
3

今日、私はcemerick / austin:clojureScriptブラウザ-REPLを使用して、breplでマクロを無制限に使用および評価できることを確認しました。つまり、bREPLのns形式を最初に明示的に評価する必要はありません。私はこのデモプロジェクトでcore.asyncマクロとカスタムドメインマクロを問題なく使用しています。

于 2013-10-17T18:20:23.047 に答える