clojurescript - 将宏应用于向量
问题描述
想象一下有一个动态生成的规范cat
[:first-name string? :surname string?]
现在我想将它们与cljs.spec.alpha/cat
.
在普通的 Clojure 中,我可以编写一个宏,它将一个带有 args 的宏 cons 并评估它,对吗?但是对于 ClojureScript 来说,这并不容易,因为它macros
是编译时的野兽,而且eval
也有点不同。
将我的 args 向量应用于 ClojureScript 中的宏的解决方法是什么?
解决方案
不幸的是,这对于动态/数据驱动的规范来说并不容易,但这显然正在为未来的版本而努力。
我认为唯一的解决方法是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"}
推荐阅读
- javascript - 流服务器意外重启
- swiftui - Quandry 文本存储
- android-studio - Android studio kotlin,如何获取随机图像数组?
- javascript - 我需要做什么才能使用 createMediaElementSourceNode 播放音乐?
- google-cloud-composer - Composer/Airflow - 在运行 DAG/管道时添加依赖项?
- java - 在从 Intellij IDEA 创建的 jar 文件中播放 .wav 时出现问题
- python - 如何将布尔数组转换为矩阵?
- reactjs - 从 switch material-ui 返回是或否
- graphics - glTF:我们如何存储基本几何图元?
- c++ - 试图继承一个类具有带参数的构造函数 - c++