は、値は通常、2つの方法のいずれかで拘束されています。通常let
声明の中で(、名前空間修飾子なしで、
地元の人々やfn
/loop
args)
これは、ブロックのスコープ外で参照されない値です(funcの引数として指定されている場合を除きます)ブロックの内部またはブロックの戻り値)を返します。通常def
(またはdefn
のような二次的なマクロ)を使用して、名前空間スコープを持つ
VARS、
これは、名前空間にアクセスできる場所にアクセスできるようになる、名前空間スコープでアクセス可能であるべき値のためです。
エラー(未結合のFNを呼び出そうと)VARを作成するために、declare
を使用することによって引き起こされ、その後、真の定義を与えることなく、それを呼んでいる。このコードで
user> (declare foo)
#'user/foo
user> (foo)
IllegalStateException Attempting to call unbound fn: #'user/foo clojure.lang.Var$Unbound.throwArity (Var.java:43)
varが存在します(declare
が作成されました)、値は割り当てられていません。 ですから、結合の後者の種類、結合VAR必要があります。どこかで、あなたのコードや使用しているライブラリのコードの一部は、呼び出し可能な値にバインドする必要があるVARを、宣言した
user> (defn foo [] "OK")
#'user/foo
user> (foo)
"OK"
user>
をしかし、適切に初期化されていません。ライブラリには、あなたが呼び出していない何らかの種類の関数init
がありますか?おそらく、定義が見えるようにするために必要な名前空間がありますか?
コードを見ずに分かりにくいです。 – Chiron