gpt4 book ai didi

Clojure deftype 带有类型提示? : Can't find matching method, 留下自动匹配提示

转载 作者:行者123 更新时间:2023-12-01 16:28:12 24 4
gpt4 key购买 nike

我收到一个IllegalArgumentException:找不到匹配方法:渲染,保留自动匹配提示,但我需要类型提示来重载该方法。我错过了什么...?

(defprotocol LinkRendererProtocol                                                                                                                                                                                                             
(render
[this node]
[this node text]
[this node url title text]
))


(deftype LinkRenderer [handlers]
LinkRendererProtocol

(render [this ^AutoLinkNode node]
(rendering :auto-link handlers node))
(render [this ^ExpLinkNode node text]
(rendering :exp-link handlers node text))
(render [this ^ExpImageNode node text]
(rendering :exp-image-link handlers node text))
(render [this ^MailLinkNode node]
(rendering :mail-link handlers node))
(render [this ^RefLinkNode node url title text]
(rendering :ref-link handlers node url title text))
(render [this ^RefImageNode node url title alt]
(rendering :ref-image handlers node url title alt))
(render [this ^WikiLinkNode node]
(rendering :wiki-link handlers node)))

(defn link-renderer
[handlers]
(LinkRenderer. (merge default-handlers handlers)))

最佳答案

协议(protocol)方法不能进行类型提示。即使它们支持类型提示,您也可能需要将它们放在协议(protocol)方法声明本身上。

如果您希望您的方法被重载或只是具有 Object 以外的参数类型,则需要将其声明为接口(interface)方法并实现该接口(interface)。您可以从 Clojure 中执行此操作(请参阅 definterfacegen-interface),或者只是在项目中包含一个声明该接口(interface)的 .java 文件。 (不用说,以这种方式声明的方法必须使用互操作语法来调用。)

请注意,重载方法是静态解析的,因此您不能使用方法重载来替代链式实例?检查。

关于Clojure deftype 带有类型提示? : Can't find matching method, 留下自动匹配提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com