以下のようなコードをMacRuby/MotionRubyで呼び出す方法についてのメモです。
- void hoge(int num, void (^block)(char *str))
{
/* blocksを利用した何らかの処理 */
}
一つはProc.newを利用した呼び出しです。
hoge(1, Proc.new{|str| ... })
ただProcオブジェクトが長くなるとしつこい書き方になってしまうので、メソッドに切り分けることもできます。Methodオブジェクトからto_procでProcオブジェクトに変換するやり方です。
def foo
hoge(1, method(:bar).to_proc)
end
def bar(str)
# ...
end
大体は素直にProc.newで書くのが良いと思いますが、通信に成功した場合と失敗した場合とでそれぞれクロージャを書くときはコードが長くなりがちなので、メソッド化するなどして、できるだけリーダブルに保ちたいものです。