私のタイプに関数を実装させたい場合、例えば。contains?
拡張するインターフェースを見つけるにはどうすればよいですか?
同様に、インターフェースが表示された場合、たとえば。clojure.lang.ILookup
実装する必要のあるメソッドを見つけるにはどうすればよいですか?
私のタイプに関数を実装させたい場合、例えば。contains?
拡張するインターフェースを見つけるにはどうすればよいですか?
同様に、インターフェースが表示された場合、たとえば。clojure.lang.ILookup
実装する必要のあるメソッドを見つけるにはどうすればよいですか?
インターフェイスに必要なメソッド(継承されたメンバーを含む)を確認したい場合は、replでjavaリフレクションを使用してください。
(clojure.pprint/pprint (.getMethods clojure.lang.ILookup))
[#<Method public abstract java.lang.Object clojure.lang.ILookup.valAt(java.lang.Object)>,
#<Method public abstract java.lang.Object clojure.lang.ILookup.valAt(java.lang.Object,java.lang.Object)>]
Clojure 1.2を使用している場合は、次を使用することもできますclojure.contrib.repl-utils/show
まず、ここからソースのクローンを作成します:(git)https://github.com/clojure/clojure.git(browser)https://github.com/clojure/clojure
含まれているのソースを見てください?src / clj / clojure / core.cljでは、向きを変えてclojure.lang.RT.containsを呼び出します。
そのファイルはsrc/jvm / clojure / lang / RT.javaにあり、Associate、IPersistentSet、Map、Setのインスタンスで機能し、配列と文字列にインデックスを付けるように見えるので、何を選択しますか。あなたの状況に意味があります。
同様に、ILookupのソースは同じディレクトリにあります。インターフェイスに慣れていない場合は、Javaでインターフェイスがどのように機能するかをここで確認できます。
含むに戻る?ただし、レコードを使用して目的を達成できる場合があります。
例えば
main=> (defrecord Action [time key args state])
main.Action
main=> (def action (Action. (System/currentTimeMillis) "key" ["arg1" "arg2"] nil))
#'warscor.main/action
warscor.main=> (contains? action :time)
true
warscor.main=> (contains? action :state)
true
warscor.main=> (contains? action :foo)
false
warscor.main=> (def action (assoc action :foo "bar"))
#'warscor.main/action
warscor.main=> (contains? action :foo)
true