rubyベストプラクティスchapter6.3

オブジェクトの詳細を調べていく方法。
ここは小節ごとに内容が変ってきてる。

リフレクションって便利よって話

単純に「kernel#p」メソッドとか「Object#inspect」とか使うんじゃなくって。リフレクションを利用すると知りたい情報にアクセス出来る。
紹介されているメソッド達(機能はメソッド名の通りなので詳細はrefeなどで)

  1. Object#instance_variables
  2. Module#instance_methods
  3. Object#private_methods
  4. Object#instance_variable_get

yamlって意外なところで使えるよって話

まずはObject#inspectメソッドの拡張。
ruby1.9.2@p180で写経するとPrawn::Document.newで、

Object dosen'nt support #inspect

っていうエラーが出たけど、原因はInspectTempleteモジュールでtypoがあったみたい。
本だとPrawn::Documentでinspectメソッドをオーバーライトしているんだけど、メソッド名をinspectsに変更したらirbで動かしてみたら見事にtypoしてた。
ちゃんと直してinspectに戻したらうまくいった。

たしかに綺麗に出力される。

でももっと便利な方法があるよーということでyamlの登場。

yamlでKernel#yというメソッドが追加されていて、

y Prawn::Document.new

ってやるだけで構造化されたオブジェクトの状態が出力される。
どれを出力しようかとかで悩む必要もなし。

大量のデータを回す時のエラーメッセージの出力

大量のデータをイテレートしてる時に落ちるのはほとんど、落ちる対象のデータが意図していないデータになっているからで、それをどうやって捕捉するかって話。
イテレートの中でrescueを入れると大体わかるから便利。

Array#select#with_indexって使い方ってあり?って思ったけど普段使ってるのは「each_with_index」かぁ。。。まだまだ知らないメソッド多いなぁ。
[1, 2, 3]って配列に対して2以上の要素を出力するっていうのを段階的にやってみる。

a = [1, 2, 4]

b = a.select
p b  => : #
b.with_index{|element, key| element >= 2 } => [2, 3]

ブロックをつけないで、selectするとEnumeratorインスタンスが出来てて、そのEnumeratorインスタンスにwith_indexとやって
ブロックをつけると初めて、selectでやりたいことをやってくれる(って理解かな?)。


Rubyベストプラクティス -プロフェッショナルによるコードとテクニック

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック