clojurescript - 将宏应用于向量

标签 clojurescript clojure.spec

想象一下有一个动态生成的 cat 规范

[:first-name string? :surname string?]

现在我想将它们与 cljs.spec.alpha/cat 一起使用。

在普通的 Clojure 中,我可以编写一个宏,该宏将使用 args 来 cons 宏并对其进行评估,对吧?但对于 ClojureScript 来说就没那么容易了,因为宏是编译时的野兽,而且 eval 也有点不同。

将我的参数向量应用到 ClojureScript 中的宏有哪些解决方法?

最佳答案

不幸的是,这对于动态/数据驱动的规范来说并不容易,但这显然正在为 future 的版本而努力。

我认为唯一的解决方法是eval,或者使用您提到的 cljs.spec.alpha 内部实现。

cljs.user=> (def cat-args [:x string?])
#'cljs.user/cat-args
cljs.user=> (s/def ::foo (eval (cons 's/cat cat-args)))
:cljs.user/foo
cljs.user=> (s/conform ::foo '("foo"))
{:x "foo"}

关于clojurescript - 将宏应用于向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52114521/

相关文章:

clojurescript - 语言脚本 : extend a Javascript class

clojure - 在ClojureScript中进行模板化

clojure - Om 下一个教程 : Correctly calling the get-people function

clojurescript - 当函数返回其符号时,如何从 var 中提取元数据?

Clojure 指定自然数

ajax - Clojurescript 序列化表单 AJAX POST

javascript - 在 NVD3 和 ClojureScript 中设置图表的静态刻度数

Clojure 规范和解构?

clojure - 如何 Clojure.Spec 引用类型(如原子)?

Clojure 规范和记录构造函数