私はblock、proc、lambda experessionの動作を理解していますが、コードで匿名メソッドを使用するときには理解できません。ラムダまたは匿名の方法はいつ使うべきですか?
匿名で解決される問題は何ですか?
私はblock、proc、lambda experessionの動作を理解していますが、コードで匿名メソッドを使用するときには理解できません。ラムダまたは匿名の方法はいつ使うべきですか?
匿名で解決される問題は何ですか?
私が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つのラムダを作成し、後でメソッドの代わりにラムダを使用します)。
ラムダの1つの非常に一般的な使用は、遅延ローディング(およびパラメータに渡す)ActiveRecordのスコープに関係するものである:
class Post < ActiveRecord::Base
scope :recent, lambda { |today| where('published_at >= ?', today) }
end
(hereから)一般に
しかし、これらの閉鎖方法があるが(例えば)一度にデータの集合を操作する簡潔な方法、または他の機能に渡すべきデータとしてコードを格納すること。
["スコープの引数を受け入れるには、クラスメソッドを使用するのが望ましい方法です。"](http://guides.rubyonrails.org/active_record_querying.html#passing-in-arguments)これはベストではないかもしれません例。 –
これはどこで役に立つのか簡単な例を挙げることができますか?ちょうど興味があった... – slhck