Fra*_*ale 4 clojure clojureclr
我正在尝试实现一个具有属性的界面,但似乎无法让它工作,我还没有通过谷歌找到任何相关的例子(还).我确定我在这里做了一些完全错误但却不知道如何解决它.
(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] ())))
Run Code Online (Sandbox Code Playgroud)
IsReusable是一个属性,我不知道如何告诉reify它不是一个传统的功能.
CompilerException clojure.lang.CljCompiler.Ast.ParseException: Must supply at least one argument for 'this' in: IsReusable
Run Code Online (Sandbox Code Playgroud)
好的,我为IsReusable提供'this'
CompilerException clojure.lang.CljCompiler.Ast.ParseException: Can't define method not in interfaces: IsReusable
Run Code Online (Sandbox Code Playgroud)
我也试过代理,但我得到了类似的结果.
我也尝试将IsReusable命名为get_IsReusable,这实际上没有什么区别,我得到的编译错误与上面相同.
我也试过deftype但是我得到了一个完全不同的错误:
(deftype foo-handler []
System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context] ()))
Run Code Online (Sandbox Code Playgroud)
编译错误:
InvalidCastException Unable to cast object of type 'clojure.lang.Var' to type 'System.Type'. clojure.lang.Namespace.ReferenceClass
Run Code Online (Sandbox Code Playgroud)
更新:
发布的deftype代码有效,我无法重现上面发布的错误.我现在不知道我当时做错了什么.
这花了我几个小时的研究和试错,但我终于成功了!
user=> (def foo-handler
(reify System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context] ())))
#'user/foo-handler
user=>
Run Code Online (Sandbox Code Playgroud)
成功!
user=> (instance? System.Web.IHttpHandler foo-handler)
true
Run Code Online (Sandbox Code Playgroud)
这种方式更好,并且可以从ASP.NET应用程序中正常工作:
(deftype foo-handler []
System.Web.IHttpHandler
(get_IsReusable [this] false)
(ProcessRequest [this context]
(.Write (.Response context) "Hello, From Clojure CLR!")))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |