gpt4 book ai didi

Clojure CLR - 实现包含属性的接口(interface)

转载 作者:行者123 更新时间:2023-12-02 12:45:28 25 4
gpt4 key购买 nike

我正在尝试实现一个具有属性的接口(interface),但似乎无法使其正常工作,而且我还没有通过 Google 找到任何相关示例。我确信我在这里做的事情完全错误,但不知道如何修复它。

(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 发布的代码有效,我无法重现上面发布的错误。我现在不知道我当时做错了什么。

最佳答案

这花了我几个小时的研究和反复试验,但我终于成功了!

user=> (def foo-handler
(reify System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context] ())))
#'user/foo-handler
user=>

成功!

user=> (instance? System.Web.IHttpHandler foo-handler)
true

这种方式更好,并且在 ASP.NET 应用程序中工作得很好:

(deftype foo-handler []
System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context]
(.Write (.Response context) "Hello, From Clojure CLR!")))

关于Clojure CLR - 实现包含属性的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476294/

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