初めてのRuby復習
たのしいRubyに続いて、初めてのRubyを復習。
この本は読むたび、何らかの気づきがあります。
メタプログラミング(p8)
Rubyが動的な言語であるということ。例えば「クラス定義」の中でattr_accessor をイテレータから呼び出し、アクセッサを定義することができる。
クラス定義やメソッド定義は通常のプログラムと異質な「宣言文」のようなものではありません。数値同士を足したり、文字列を出力したりするのと同じく実行文です。
機能検索(p12)
Rubyには既に用意されている多くの機能があるということ。
(1)そのための専用の文法はあるか
(2)組み込み関数はあるか
(3)その機能を持っていそうな組み込みクラスはあるか
(4)その機能を持っていそうな標準添付ライブラリはあるか
(*)添付ライブラリにもないときには標準外の外部ライブラリをあたる
実行モデル(p14)
これも動的であることの説明。実行フェーズになて初めて検出できるエラーがある。(継承の基底クラスがなかった場合など)
クラス定義やメソッド定義も含めて、ソースコードに書かれているすべての内容は実行文です。
実行時ロード(p15)
require で指定されたライブブラリは、require している側のプログラムの実行時にロードされ、解釈、実行されるのであてって解釈時にロードされるのではない。
例2-13(p35)
mapで呼び出されるブロックで acid[0,1] としているのに改めて気づく。
この場合、1文字からなるStringオブジェクトが欲しいので、添字と長さ1を指定する必要があるのですね。
もしくは acid[0].chr とするかどちらか。
例2-14(p36)
次のような省略記法があったのですね。
シンボルで渡せる1引数の関数なら良いみたい。
string_data.map(& :downcase)
メソッド呼び出しとハッシュ(p39)
メソッド呼び出しの最後の引数としてハッシュリテラルを渡す場合には {} を省略でき、ブロックとの解釈されることを防止できる。
Enumerator(p42)
すっかり忘れている(悲)