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].

实际上,对于像' [Foo Bar *] [为此|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/parse_ast.clj#L344-L345]的引用HVec类型已经正确实现了。

此更改应修复问题;合约生成已经适用于引用的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 报告)
...