gpt4 book ai didi

java - 为什么我不能使用扩展类型扩展 Clojure 的 IFn?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:33 24 4
gpt4 key购买 nike

我看过 David Nolen 关于 ClojureScript 的演讲,他在演讲中将 IFn 扩展到 Regexp,这样我们就可以将正则表达式文字作为字符串上的函数来调用以检查匹配。

我在常规 Clojure 中尝试了与字符串类似的操作,但我得到了这个异常。我看到 IFn 是一个用 Java 编写的接口(interface),但在 CLojrue 前端的实现是如何工作的。

(extend-type java.lang.String
#_=> clojure.lang.IFn
#_=> (-invoke
#_=> ([this index]
#_=> (get (seq this) index))))
IllegalArgumentException interface clojure.lang.IFn is not a protocol clojure.core/extend (core_deftype.clj:742)

最佳答案

异常应该给你一个提示。 IFn 不是 Clojure 中的协议(protocol)。它在 ClojureScript 中。您可以扩展 协议(protocol)、实现 Java 接口(interface)和子类。在这种特殊情况下,您甚至不能将 java.lang.String 子类化,因为它被声明为 final。

关于java - 为什么我不能使用扩展类型扩展 Clojure 的 IFn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975100/

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