2024年 Clojure 调查表 中分享您的看法!

欢迎!请查看关于页面以获取更多关于其工作方式的信息。

0
core.typed

使用 clojure.core.typed/defprotocol 定义多参数协议方法时,实现这些方法的类型化定义在类型检查过程中会失败,出现 "没有匹配的参数个数" 错误。请参阅附带的测试用例。

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))

将给出以下与参数个数相关的错误

收集了 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)没有匹配的参数个数:[R t/Any -> t/Any]
在: (f [a] 1)

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

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

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