1

私はblock、proc、lambda experessionの動作を理解していますが、コードで匿名メソッドを使用する場合は理解できません。

匿名が解決する問題は何ですか?

4

2 に答える 2

2

ラムダの非常に一般的な使用法の1つは、スコープ内のActiveRecordリレーションの遅延読み込み(およびパラメーターの受け渡し)です。

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

ここから)

ただし、一般的に、これらのクロージャーメソッドは、(たとえば)データのコレクションを一度に操作したり、他の関数に渡されるデータとしてコードを格納したりするための簡潔な方法です。

于 2012-05-06T19:30:31.957 に答える
1

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つのラムダを記述し、後でメソッドの代わりにラムダを使用します)。

于 2012-05-06T19:22:24.400 に答える