2009-07-11 9 views

答えて

0

これはJavascript固有のもので、Javascriptタグは表示されませんが、匿名関数を作成するのは珍しいことではありません。それはしばしば変化する公害から地球規模の範囲を保つために行われます。

var x = 1; 
(function(){   
    var x = 2; 
})(); 
x == 1; 
0

本質的に役に立たない関数ラッパーを作成する必要はありません。

7

匿名関数を記述しないので、すぐに呼び出します。通常、それを使って何かを行う他の関数に渡されます(たとえば、配列を別の配列にマップするために無名関数を使用します)。

1

おそらく最大の用途は、他の場所では使用されない、またはオンデマンドで動的に作成される必要のある一時的な機能です。そうすれば、彼らは名前空間を "汚染"する必要はありません。 Pythonで例えば

、:

x_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
y_values = map(lambda x: x**x + 2x + 3, x_values) 

ラムダを使用することにより、私はちょうど1つの多項式(X^2 + 2X + 3)のためのモジュールの名前空間内の関数を作成する必要はありません。

特に関数型プログラミング(ルックアップのクロージャーやカリングなど)に便利な場所はたくさんあります。

0

これは、式構文でメソッドのセマンティクスを使用する必要があるためです。

var l = new List<int>() { 1, 2, 3, 4, 5 }; 
var a = l.Where(i => i > 3); // a = 4, 5 

整数が3より大きいかどうかをチェックする新しいメソッド述語を書くのは嫌です。私は式を入れることしかできない方法の意味を欲しい。無名関数は私に両方を持つことができます。 Woot! :)

0

なぜ「ラムダ式を使うの?」と聞いている場合、いくつかの回答があります。ラムダ式は簡略化されたものであり、完全無名関数(すなわち、delegate()という用語)や完全な関数と代理人よりはるかに冗長なものよりも読みやすく、理解しやすいです。ラムダ式は、ソフトウェアプログラミングにおいて非常に頻繁に行われる短く単純な「表現」計算(すなわち、入力の集合に対する単純な数学)を実行するのにも理想的である。

ラムダ式は、コードの表現力、シンプルさ、可読性を向上させる強力なツールです。

2

これらは通常コールバックに使用されます。あなたのコードはそれを直接実行しないので、コンテンツを書くことはできません。

+0

直接実行しない場合、実行はいつですか?それには名前はありません! –

+0

名前付き関数を渡した場合と同じように、関数を渡して決定するたびに実行されます。それは名前がないので、何ですか?あなたがCでメモリをmallocしているのであれば、名前はなくアドレスだけです。無名関数は同じです。フードの下では、通常、スタックのどこかに関数を作成し、実際にその関数へのポインタを渡すだけです。 – patros