instance?
(instance? Class x)
x がそのクラスのインスタンスのとき true です(オラクルの isInstance と同じ)。クラスや
インタフェースは、オラクルでのクラスがそれ自身であるか、それを実装する種類の値すべてについて
答えます。java.util.List はベクタ・リスト・遅延 seq、java.util.Map はマップと record、
clojure.lang.IFn は関数・キーワード・シンボル・マップ・セット・ベクタ・var、Comparable は
文字列・数値・キーワード・ベクタ、java.io.Writer は *out* について true です。Object は
nil 以外のすべての値です。既知の record/deftype 名はディスパッチタグの検査になります。
プロトコルのインタフェース(user.P。名前空間と名前はオラクルと同じく munge され、
my_app.core.my_p のようになります)は、本体でそのプロトコルを挙げた record・deftype・reify
について、メソッドの有無によらず true です。extend-type や extend-protocol の対象は
インスタンスではありません(satisfies? は true です)。
throwable クラス(Exception、IllegalArgumentException、clojure.lang.ExceptionInfo、
ドット付きや import した名前)は、例外と実行時エラーをそのクラス(class が返すクラス)か
そのサブクラスであるかで検査します。インタプリタと JVM ではホストのオブジェクトをホストの
クラスで検査するので、(instance? java.io.File (java.io.File. "x")) と
(instance? Number (java.math.BigDecimal. "1")) は true です。ここではどの値もインスタンスに
ならないクラス(Clojure の値に対する java.io.File、Integer)は false、どのクラスでもない
名前は unknown name になります。