2024年Clojure调查问卷!中分享您的想法。

欢迎!请参阅关于页面了解此工作的一些更多信息。

0
core.typed

当使用clojure.core.typed/defprotocol定义多变种协议方法时,实现这些方法的deftype在类型检查中失败,出现“没有匹配的变种”错误。请参阅附带的测试用例。

2 个回答

0

评论由:freakhill

我发现与defrecord有关的一个相当类似的问题。有某种类型的解决方案吗?

project.clj http://pastebin.com/bn6giuvH
core_typed_bug/core.clj http://pastebin.com/JjfhWLSH
错误信息 http://pastebin.com/djsAicd1


使用clojure 1.7.0-beta2和core.typed 0.2.87

`
(ns core-typed-bug.core
(:require [ clojure.core.typed :as t ]))

(t/defprotocol P
(f
[a] :- Any
[a b :- Any] :- Any))

(t/ann-record R [])
(defrecord R []
P
(f [a] 1)
(f [a b] 2))

将产生以下与arity相关的错误

收集了1个命名空间,用时758.831468毫秒
未检查clojure.core.typed(不依赖clojure.core.typed)
开始检查core-typed-bug.core
10: 未检查core-typed-bug.core/->R定义
检查core-typed-bug.core用时923.152062毫秒
检查了2个命名空间,用时1702.704416毫秒
类型错误(core_typed_bug/core.clj:10:1)没有匹配的arity: [R t/Any -> t/Any]
在: (f [a] 1)

类型错误(core_typed_bug/core.clj:10:1)没有匹配的arity: [R -> t/Any] 在: (f [a b] 2)

类型检查器:找到2个错误
找到错误
`

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