プログラミングメモ
メモなので正しくないかもしれません。
closure
- ブロック化されたコードのことを指す。
- 関数呼び出しの時にクロージャを引数として渡すことができる。
- スコープ外の変数など呼び出された環境の値を参照できる。
- lexically scoped lamda ← Guy Steeleによる定義
- lexically scopedとは、変数の参照が内包される(?)lambda formが評価された時にアクティブな名前をlexicallyに内包する定義にバインドすることを指す。(よくわからない)
- lexically scoped anonymous function
- closure is a function that captures the bindingds of free variables in its lexical context.
- closure は blockを使って作る事が出来る。
- closure is a nameless function object.
- closureは、closureが渡された関数の振る舞いをカスタマイズする事に使える。たとえば、ソート関数でソートする条件をclosureで決めることができる。
- lexical scopingに対応するのはdynamic scoping
- Rubyのブロックはclosure (?)
Block
- blocks are basically nameless function
- Lispのlambdaみたいなもの
- closureオブジェクトはコード自体とそれを実行する環境(スコープ)を持つ。よって呼び出し側のローカル変数を参照できる。呼び出し側の関数が終了していても、closureはその呼び出し側のローカル変数を保持し続ける。保持されるのはローカル変数の実体なので、他のものが変更すると、closureが使う値も変更されたものになる。
- closureによって参照されている外部のローカル変数は、元のスコープが終わっても参照できる。これは、closureに参照されていることによって、スコープを抜けても開放されずに生き延びるからである。
- closureからの参照がなくなった時点でガベージコレクタによって回収される。
未整理
- “Closures are an stateful object created on the fly when a block of code with its own scope beomes bound to variables in its environment.”
Trait
多重継承を使わずに他のクラスの機能をまとめることができる。
MVCのcontrollerクラス
controllerクラスは、actionを受け取り、outletに出力を行う。
introspection(イントロスペクション)
オブジェクト指向言語において、実行時にオブジェクトの型を得ることイントロスペクションという。
