2024年Clojure状况调查! 中分享您的想法。

欢迎!请参阅 关于 页面,以了解更多关于如何使用本站的信息。

0
core.typed
h1. 问题

HVec的谓词生成不支持统一的可变参数。


((t/pred (t/HVec [(t/Value :foo) t/Keyword *])) [:foo :bar])
CompilerException clojure.lang.ExceptionInfo: 内部错误 (*cider-repl服务*:97:17) :协议不支持在类型->pred: * {:type-error :clojure.core.typed.errors/internal-error, :env {:line 97, :column 17, :file "*cider-repl服务*", :ns spark.dev.repl}}, 编译:(*cider-repl服务*:97:17)


h1. 解决方案

这看起来是因为{{*}}没有正确解析而引起的。

首先,{{HVec}}显然忽略了可变参数[当它们被解析时|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/parse_ast.clj#L249-L275].

这实际上是正确完成的,针对引用的HVec类型如 '[Foo Bar *] [在这里|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/parse_ast.clj#L344-L345]

此更改应该修复问题;根据合同的生成已经为引用的HVec工作,因为它期望一个[剩余条目|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/type_contract.clj#L81-L86]

*拉取请求*
*提交*
*版本*

3 个答案

0

发表评论的人:ambrosebs

错误有点奇怪。可能是{{t/Keyword}}在这里失败。

请尝试隔离这个错误。

0

发表评论的人:ambrosebs

哦,我明白了问题所在。无法解析名为**的协议!

0
参考:[https://clojure.atlassian.net/browse/CTYP-306](https://clojure.atlassian.net/browse/CTYP-306)(由 alex+import 报告)
...