我正在尝试实现一个带有属性的接口,但似乎无法使其正常工作,而且在谷歌上也没有找到相关的例子(至少目前还没有)。我相信我在这里做错了什么,但不知道该如何解决。
(System.Reflection.Assembly/LoadWithPartialName "System.Web")
; naive, just trying to figure out how to implement the IHttpHandler interface in Clojure
(defn foo-handler []
(reify System.Web.IHttpHandler
(IsReusable [] false)
(ProcessRequest [context] ())))
IsReusable是一个属性,我不知道如何告诉reify它不是传统的函数。
CompilerException clojure.lang.CljCompiler.Ast.ParseException: Must supply at least one argument for 'this' in: IsReusable
好的,我为IsReusable提供了'this'。
CompilerException clojure.lang.CljCompiler.Ast.ParseException: Can't define method not in interfaces: IsReusable
我也尝试过代理,但结果类似。
我还尝试将IsReusable重命名为get_IsReusable,但实际上并没有什么区别,我得到与上面相同的编译器错误。
我还尝试过deftype,但是我收到了完全不同的错误:
(deftype foo-handler []
System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context] ()))
编译错误:
InvalidCastException Unable to cast object of type 'clojure.lang.Var' to type 'System.Type'. clojure.lang.Namespace.ReferenceClass
更新:
关于 deftype 的代码是有效的,我无法复现我先前发布的错误。现在我不知道当时做错了什么。