Rubyによるクローラ開発技法 読書メモ その2

DSC03930

sendメソッドというものの存在を初めて知りました。
前回に引き続き、Chapter1です。
クロールしたデータを最終的にプレーンテキストかRss形式で出力する際に引数で指定したメソッド名を呼び出すというところで出てきて、驚きを禁じえませんでした。
まだまだ知らないことたくさんあるなぁ〜

サンプル

def format_text
  hoge
end

def format_rss
  hoge
end

formatter = case ARGV.first
            when "rss-output"
              :format_rss
            when "text-output"
              :format_text
            else
              :format_rss
            end

puts __send__(formatter)

これで、 このソースを引数(rss-output or text-output)で実行するとどちらかのメソッドが呼ばれる。

けど、最初formatterの結果がシンボルでいいの? と戸惑った。

sendメソッドは、レシーバの持っているメソッドを呼び出します。第1引数nameにはメソッド名をシンボルか文字列で指定します。メソッドの引数を指定したいときは、第2引数arg以降に引数を並べます。戻り値は、呼び出したメソッドの戻り値が返ります。

参考)rubyリファレンス:send

あ、なるほど・・

ちなみに、 __send__ は send の別名だそうです。
__send__使う方に統一してよいのかな・・?

2016-01-11 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*