我看到David Nolen关于ClojureScript的演讲,他将IFn扩展到Regexp,以便我们可以将正则表达式文字称为字符串上的函数以检查匹配。
我在常规Clojure中尝试过与Strings类似的东西,但是我得到了这个例外。 我看到IFn是一个用Java编写的接口,但是实现如何在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)
答案 0 :(得分:7)
该异常应该给你一个提示。 IFn
不是Clojure中的协议。它在ClojureScript中。您可以extend
协议,实现Java接口和子类。在这种特殊情况下,你甚至不能将java.lang.String子类化,因为它已被声明为final。