RubyMotionのサンプルコード呼んでて、
1 2 3 |
@some_obj = SomeClass.alloc.init.tap do |sc| sc.someProp = "test" end |
みたいなコードがあったんだけど意味がわからなかった。
いや、意味は予想つくんだけど、 tapってなんやねんって。
iOSのAPIにはそんなメソッドないし、てっきりRubyMotionの便利機能なのかなーとか思ってたら、
なんとRuby(Object)のメソッドだった。
全然知らなかった…。
tapかわいいよtap – (rubikitch loves (Emacs Ruby CUI Books))
結局何なのかというと、「そのオブジェクト自身をブロックに渡して実行して、その後自分自身を返す」メソッドらしい。
単純な例だとこんな感じ。
1 2 |
> "Hello".tap { |s| s << ", world!" } => "Hello, world!" |
その他の利用例がtap #Ruby – Qiitaにまとまってた。
ふむふむ、これは便利ねー。
RubyMotionのコードではinitで返って来たオブジェクトのtapを呼んで、
ブロック内で初期化して、その結果を変数に代入してたわけね。
納得。
最近のコメント