请分享您的想法,参加2024年Clojure调查!

欢迎!请访问关于页面,了解更多这个平台的信息。

0
ClojureScript
重新标记

在Clojurescript 1.10.844版本之前,我可以通过查看以下内容来可靠地判断出一个符号sym(在宏展开时)是否指的是一个协议:

(:protocol-symbol (cljs.analyzer.api/resolve &env sym))

CLJS-3276提交以来,这在我的代码中不再生效。据我所知,defprotocol仍然附加这个数据,并且,cljs.core仍然内部使用此方法。是否存在更好的/受支持的检测一个符号是否指向协议的方法?我非常希望这种行为能够重新引入,或者有其他可靠的方法。

1 个回答

0

我想知道你为什么需要问这个问题?

用例是,如果在编译时发现我们编写的某个工具被误用(基本上,"只能注册协议!"),则抛出错误。

这个工具的API与transit的序列化和反序列化处理器声明性结构的API非常相似,但它是针对协议而非原始类型/记录构建的。

由于在CLJS中协议没有被具体化,并且`satisfies?`是一个会毫不犹豫且默默以`false`回答不合适问题的宏,当给非协议时,一个合理的编译时错误,用于防止程序员错误,非常有用。

如果问题有其他含义,请见谅。

编辑了
如果您的问题是为何甚至要问这个问题,我想这是因为我不清楚`:protocol-symbol`是一个实现细节还是支持API的一部分。如果是前者,我想知道是否有其他机制作为分析器API的一部分得到支持。
...