問題タブ [function-literal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
16 に答える
3368 参照

recursion - *再帰的*関数リテラル/無名関数をサポートする言語は?

最近では、かなりの数の主流言語が関数リテラルをサポートしているようです。無名関数とも呼ばれますが、名前があっても構いません。重要なことは、関数リテラルは、他の場所でまだ定義されていない関数を生成する式であるため、たとえば C では&printfカウントされないということです。

追加する編集:本物の関数リテラル式がある場合は、それを関数に渡すか、すぐに引数に適用<exp>できるはずです。.f(<exp>)<exp>(5)

recursiveである関数リテラルを記述できる言語はどれか知りたいです。ウィキペディアの「匿名再帰」の記事には、プログラミングの例はありません。

再帰的階乗関数を例として使用しましょう。

ここに私が知っているものがあります:

  • JavaScript / ECMAScript でそれを行うことができますcallee:

    /li>
  • を使用する言語では簡単ですletrec。たとえば、Haskell (これはそれを呼び出しますlet):

    let fac x = if x<2 then 1 else fac (x-1) * x in fac

    LispとSchemeにも同等のものがあります。のバインディングはfac式に対してローカルであるため、式全体が実際には無名関数であることに注意してください。

他にもありますか?

0 投票する
1 に答える
476 参照

scala - デフォルトの型パラメータ化された関数リテラルクラスパラメータ

これは意図された動作ですか、それともバグですか?次の特性を考慮してください(クラスであっても、関係ありません)。

これは私が期待していたことです:

でも、これ?

0 投票する
1 に答える
288 参照

scala - 関数リテラルでローカルスコープを意図せずにキャプチャしないようにするにはどうすればよいですか?

Scala の例で質問しますが、命令型と関数型のハイブリッド スタイルを許可する他の言語に影響を与える可能性があります。

以下に短い例を示します ( UPDATED、以下を参照)。

iterator.filterNotでは怠惰に動作します。これは素晴らしいことです! その結果、返されたイテレータが多くのメモリを消費しないことが期待されます (実際、O(1))。しかし悲しいことに、私たちはひどい間違いを犯してしまいました:filterNotは遅延しているため、関数literal への参照を保持していますhuge contains _

したがって、メソッドは実行中に大量のメモリを必要とし、そのメモリはメソッドの終了直後に解放できると考えていましたが、実際には、返された を忘れるまでメモリはスタックしIteratorます。

(私はちょうどそのような間違いを犯しました。追跡するのに長い時間がかかりました!ヒープダンプを見ると、そのようなものを見つけることができます...)

この問題を回避するためのベスト プラクティスは何ですか?

唯一の解決策は、スコープの終わりを生き延び、中間変数をキャプチャした関数リテラルを注意深くチェックすることです。非厳密なコレクションを構築してそれを返すことを計画している場合、これは少し厄介です。この問題を回避し、適切なコードを記述できるようにする、Scala 固有またはその他の優れたトリックを考えられる人はいますか?

更新:以下の huynhjl の回答が示すように、私が以前に示した例は愚かでした。それは:

実際、これらの仕組みが少し理解できたので、それほど心配していません。

0 投票する
5 に答える
1476 参照

scala - このようにscalaの関数リテラルを単純化する方法は?

私はscalaが初めてで、指定された整数が奇数かどうかをチェックする関数リテラルを書き込もうとしています。私の最初の試みは:

val isOdd = (x:Int) => (x & 1) == 1

それはうまく機能し、パラメーター x はこの関数リテラル内で 1 回しか現れないため、次のように "_" 表記を使用してさらに単純化したくなります。

val isOdd = ((_:Int) & 1 ) == 1

ただし、今回はコンパイラが不平を言います:

この警告はどういう意味ですか? ((_ :Int) & 1)コンパイラは、値が得られるビットごとの操作ではなく、新しいオブジェクトとして認識するのはなぜですか? 「_」表記を使用してこの関数リテラルを記述する方法はありますか?

0 投票する
1 に答える
170 参照

javascript - オブジェクトがオブジェクト リテラルまたはオブジェクト コンストラクター呼び出しを使用して作成されたかどうかを判断する方法は?

より具体的には、特定のオブジェクトがリテラルを使用して作成されたかどうかをどのように判断しますか?

明らかに、上記の 2 つを比較すると、たとえば次のようになります。

... 最初の 2 つのアラートが表示さfalseれ、最後の 2 つのアラートが表示されます[Object object]

たとえば、これをやりたい場合は次のようにします。

...これを行うにはどうすればよいですか?

オブジェクトがJavascriptのオブジェクトリテラルであるかどうかを判断する方法を調べましたか? 、しかし、それは私の質問には答えません。

0 投票する
1 に答える
3606 参照

scala - 関数リテラルの構文を単純化するためのScalaアンダースコアの使用

私は次のコードを持っています:

私は最後の文を次のように単純化しようとしました:

しかし、通訳は言います:

私はタイプについてより明確にしようとしました:

コンパイラと私はお互いを理解していません:(

よろしくお願いします、

スタン

0 投票する
1 に答える
117 参照

actionscript-3 - ActionScript 3の関数と関数リテラルの違いは?

ActionScript 3 の次の 2 つの関数定義の違いは何ですか?

0 投票する
1 に答える
2517 参照

javascript - Javascript の変数、オブジェクトを null にするより良いアプローチ

私はモバイル用に何かを構築していますが、どうにかしてnullオブジェクト、変数をクリアしてメモリを少し解放したいと考えています。ここに 2 つの簡単な例があります。どちらも私が信じているように匿名関数ですが、どの方法がより適切またはより有効なアプローチですか? 全部間違ってたらごめんなさい。私にはどちらも同じことをしているように見えますが、必要になるまでオブジェクトが作成されないため、最初のものの方が好きです。2 番目のバージョンでは、変数やオブジェクトなどを作成するためのコードがすぐに実行されますが、必要になるまでメインのビルド機能は実行されません。

どの方法がより一般的かを理解しようとしています。私のような初心者は、無名関数の使用法をほとんど誤解していることを知っています。

V1

V2

html またはイベントの後半

0 投票する
3 に答える
6026 参照

javascript - JavaScript オブジェクト リテラル メソッド: 再帰呼び出し

オブジェクトリテラルからメソッドを再帰的に呼び出すことは可能ですか?

例えば:

エラー: 'f' は定義される前に使用されました。

ありがとう。