gpt4 book ai didi

clojure - 如何从 clj 宏访问编译时 cljs var 元数据?

转载 作者:行者123 更新时间:2023-12-04 18:33:01 24 4
gpt4 key购买 nike

我想构建一个 ClojureScript 宏(通过 Clojure 执行/编译),通知它基于 ClojureScript var 参数的静态编译时元数据构建返回表单。

我知道可以从 ClojureScript 代码访问编译时静态 var 元数据(使用 (meta (var varsym)) ;参见 this post)。但是,编译过程是否可以通过我们可以从宏访问它的方式访问这些数据?

这是我想要做的事情的粗略草图(问题实际上是你如何在下面写 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 map 的关键。

关于clojure - 如何从 clj 宏访问编译时 cljs var 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com