私はblock、proc、lambda experessionの動作を理解していますが、コードで匿名メソッドを使用する場合は理解できません。
匿名が解決する問題は何ですか?
私はblock、proc、lambda experessionの動作を理解していますが、コードで匿名メソッドを使用する場合は理解できません。
匿名が解決する問題は何ですか?
ラムダの非常に一般的な使用法の1つは、スコープ内のActiveRecordリレーションの遅延読み込み(およびパラメーターの受け渡し)です。
class Post < ActiveRecord::Base
scope :recent, lambda { |today| where('published_at >= ?', today) }
end
(ここから)
ただし、一般的に、これらのクロージャーメソッドは、(たとえば)データのコレクションを一度に操作したり、他の関数に渡されるデータとしてコードを格納したりするための簡潔な方法です。
Rubyでこのようにラムダを使用する理由の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
ことで、ラムダ内で閉じることなくアクセスできます。前述したように、ファンキーなことは何もありませんが、小さなスクリプトの場合は、これを実行することがあります(「this」はオプションを解析し、それらのオプションを使用する1つまたは2つのラムダを記述し、後でメソッドの代わりにラムダを使用します)。