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