(rontolisp) docs
← 構文と定義

binding

(binding [var init ...] body...)

本体の周りで各 var を動的エクステントで再束縛します。本体から呼ばれるコードにも束縛が見え、終わればルートに戻ります。束縛できるのは ^:dynamic な var と clojure.core の特殊変数(*out*、*in*、*err*、*agent* と、*print-length* や *assert* などのフラグ――シンタックスクォートで修飾された clojure.core/ 付きの綴りも同様)だけで、それ以外はオラクルの非 dynamic エラー同様に拒否されます。^:dynamic な defn は関数を var に保持するため、やはり再束縛できます(それ以外の defn は拒否されたままです)。初期化は let 同様に逐次です。

*in* は *standard-input* です(nil になることはありません)。再束縛すれば (.readLine *in*) のような読み手に供給できます。ストリーム 上では read-line 越しに読み、末尾越しは nil を答えます。