2012-05-06 3 views

答えて

1

私がRubyでこのようにlambdaを使用する理由の1つは、周囲のスコープからのものをキャプチャするためにクロージャが必要なときです。例えば、小さなスクリプトでは、引数として渡すより便利です。他の人(ab)はトップレベルのインスタンス変数を使用していますが、私はそんなに好きではありません。要求されたよう

アップデート:ここでは少し例を示します

shift_timestamp = -> ts do 
    t = Time.parse(ts.gsub(',','.')) + options[:time] 
    "#{t.strftime("%H:%M:%S")},#{t.usec.to_s[0..2]}" 
end 

は、これは私が字幕を移動させるために書いた小さなツールです。これは短いスクリプトであり、この方法で書くと、私はoptionsを閉じてラムダの中に入ることができました。私が言ったように、何もファンキーではありませんでしたが、小さなスクリプトでは、これらのオプションを使用する1つまたは2つのラムダを作成し、後でメソッドの代わりにラムダを使用します)。

+0

これはどこで役に立つのか簡単な例を挙げることができますか?ちょうど興味があった... – slhck

2

ラムダの1つの非常に一般的な使用は、遅延ローディング(およびパラメータに渡す)ActiveRecordのスコープに関係するものである:

class Post < ActiveRecord::Base 
    scope :recent, lambda { |today| where('published_at >= ?', today) } 
end 

hereから)一般に

しかし、これらの閉鎖方法があるが(例えば)一度にデータの集合を操作する簡潔な方法、または他の機能に渡すべきデータとしてコードを格納すること。

+0

["スコープの引数を受け入れるには、クラスメソッドを使用するのが望ましい方法です。"](http://guides.rubyonrails.org/active_record_querying.html#passing-in-arguments)これはベストではないかもしれません例。 –

関連する問題