10

私はつるはし1.9で読んでおり、著者は次のようにラムダを使用しています:

bo = lambda {|param| puts "You called me with #{param}"}
bo.call 99     => 'You called me with 99'
bo.call "cat"  => 'You called me with cat'

私の質問は次のとおりです。これは、同じことを行うメソッドを定義するだけでなく、どのように良い/悪い/異なるのですか? そのようです:

def bo(param)
  puts "You called me with #{param}"
end

bo("hello") => 'You called me with hello'

私には、ラムダ構文ははるかに紛らわしく、スパゲッティのように見えます。

4

2 に答える 2

16

ラムダ:

  • Procs のバリエーションです。
  • ブロックとの間で変換できます。
  • 新しいクロージャー スコープを開始しないでください (つまり、ラムダのスコープ外で定義された変数にアクセスできますdef)。
  • 変数として渡すことができます。

プロシージャ、ブロック、ラムダについて説明しているこの記事をチェックすることをお勧めします。

編集: このリンクは古くなっています。今後の参考のために、この記事を試してください

于 2012-04-18T20:22:19.567 に答える
3

ラムダを定義する利点は、そのラムダ オブジェクトを属性として別のメソッドに渡すことができることです。

def method1 &b
  #... some code
  b.call
end

def method2 &b
  #... some more code...
  b.call
end

def method3 &b
  b.call
  #even more code here
end

myCallback = lambda { "this is a callback that can be called from several methods"}

その後、次のように使用できます。

method1 &myCallback
method2 &myCallback
method3 &myCallback

そして、これの美しさは、コールバックのコードを 1 回だけ記述し、それを 3 回使用したことです....

さらに読むには、このリンクをご覧になることをお勧めします:)

于 2012-04-18T20:10:05.110 に答える