4

プロパティを持つインターフェイスを実装しようとしていますが、それを機能させることができないようです。また、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 用に投稿されたコードは機能しますが、上記のエラーを再現できません。当時の私が何を間違っていたのか、今となってはわかりません。

4

1 に答える 1