簡體   English   中英

如何從clj宏訪問編譯時cljs var元數據?

[英]How to access compile time cljs var metadata from a clj macro?

我想構建一個ClojureScript宏(通過Clojure執行/編譯),它根據ClojureScript var參數的靜態編譯時元數據通知它構造一個返回表單。

我知道可以從ClojureScript代碼訪問編譯時靜態var元數據(使用(meta (var varsym)) ;參見這篇文章 )。 但是這些數據是否可以通過我們可以從宏訪問它的方式訪問編譯過程?

這是我想要做的事情的粗略草圖(問題是你如何在下面寫下get-meta-for-varsym ):

;; executed/compiled in clj, targeting cljs
(defmacro themacro
  [varsym & args]
  (let [var-meta (get-meta-for-varsym varsym)
        return-form (compile-return-form-from-metadata var-meta args)]
    return-form))

為此,您必須使用Clojurescript分析器:

(ns your-macros
  (:require [cljs.analyzer :as cljs]))

(defmacro var-data
  [sym]
  (cljs/resolve-var &env sym))

然后在你的clojurescript文件中:

(ns your-cljs)

(def ^{:foo :bar} xxy {})

(var-data xxy)

元數據將位於:meta地圖的:meta鍵中。

暫無
暫無

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

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