RAAのhttp-access2/lib/http-access2.rbリーディングメモ。
LoadErrorのcatch
30行目以降。
30: SSLEnabled = begin
31: require 'openssl'
32: true
33: rescue LoadError
34: false
35: end
ユーザプログラムが動作の前提となるライブラリを呼べない場合、コンパイル言語ではコンパイルエラーを発すればよいが、コンパイルしない言語ではどう捉えるか。
- ロード時の動的エラーをそのまま投げる。
- 1. を受け取って例外処理(結果をbool値で持ち回る)。
考えてみれば確かにこの2つくらいしかないかと思うが、考えたこともなかったのでメモ。
クラスメソッドをインスタンスメソッドに委譲
74行目以降。
74: class << self
75: %w(get_content head get post put delete options trace).each do |name|
76: eval <<-EOD
77: def #{name}(*arg)
78: new.#{name}(*arg)
79: end
80: EOD
81: end
82: end
インスタンスメソッドと同名のクラスメソッドを作成してインスタンスメソッドに委譲させているみたい。なぜそんなことを……?