为什么我不能使用extend-type扩展Clojure的IFn?

时间:2014-07-26 20:10:08

标签: java clojure clojurescript

我看到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)

1 个答案:

答案 0 :(得分:7)

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

相关问题