問題タブ [closures]
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.
php - PHP のクロージャ...正確には、それらは何であり、いつ使用する必要がありますか?
そのため、私はオブジェクト指向の最新の方法でプログラミングを行っています。私は、PHP が実装する OOP のさまざまな側面を定期的に利用していますが、いつクロージャーを使用する必要があるのか疑問に思っています。閉鎖を実装することが役立つ場合に光を当てることができる専門家はいますか?
c# - デリゲートを持つローカル変数
これは明らかにベストプラクティスではないようです。なぜそれがベストプラクティスではないのか、またはこれがどのように機能するのかを誰かが説明できますか? 説明を提供する本や記事をいただければ幸いです。
出力される値は、2 番目の値"Modified"です。コンパイラの魔法のどの部分がこれを機能させていますか? これは、ヒープ上の値を追跡し、後で再度取得するのと同じくらい簡単ですか?
[編集]: いくつかのコメントを考慮して、元の文をいくつか変更します...
java - 標準の Mac JDK6 で BGGA クロージャ プロトタイプを使用するにはどうすればよいですか?
既存の JDK 6 (Mac OS X Leopard の標準) でBGGA クロージャ プロトタイプを使用しようとしています。私がコンパイルしているサンプル コードは、BGGA チュートリアルからのものです。
私は次のことを試しましたが、どれもうまくいきません:
- closures.jar を /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib にコピーしました
- -Xbootclasspath/a:/path/to/closures.jar を指定して javac を実行しました
- -J-Xbootclasspath/a:/path/to/closures.jar で javac を実行しました
- 独自のシステム ライブラリを定義し、それを BGGA を利用したコードでプロジェクトにアタッチすることで、eclipse ganymede から試しました。
4 つのケースすべてで、コンパイル エラーが発生します。これは、コンパイラがブートストラップ クラスパスの Closures.jar を取得しなかったことを示しています。これをEclipseから、または少なくともMavenから機能させたいと思っています。ありがとう!
actionscript-3 - イベントハンドラーのクロージャーを使用するActionScript3.0
私はこれをやってみました:
そして、それはイベントリスナーを追加します。この状況でうまく機能するので、クロージャーを使用するのが好きです。
ただし、イベントリスナーを削除するには、元の関数への参照が必要です。匿名のクロージャーを使用したため、機能しません。次のことを試しました。
と同様:
私がそれが機能することを見つけた唯一の方法は、匿名のクロージャを捨てて、イベントリスナーを既存の関数に向けることでした:
イベントハンドラーを削除する機能を保持しながら、イベントハンドラーに匿名クロージャを使用する方法を知っている人はいますか?
delegates - ラムダ式を説明できますか?
ラムダ式は実際には取得しません。それらはALGOLの時代から存在していましたが、PythonとRubyが非常に人気になったごく最近まで、私はそれらについて聞き始めませんでした。C#に=>
構文が追加されたので、私の世界(.NET)の人々はますますlamdba式について話し合っています。
ラムダ計算に関するウィキペディアの記事を読んだことがありますが、私は実際には数学者ではありません。実用的な観点からはよくわかりません。ラムダ式はいつ使用しますか?なんで?それが私がすべきことだとどうやって知ることができますか?
ラムダ式の問題を前後の形式で解決する方法の例を示していただけますか?命令型言語であれば問題ありませんが、C#が最も理解しやすいでしょう。
java - javaへのボルトオンソリューションとしてのBGGAクロージャー?
昨日、@headius / Charles Nutter が twitter で非常に興味深いアイデアを思いつきました。
@danny_l Gafter も同じ過ちを犯しました。Groovy がフォークである以上、フォークされた Java という意味ではありません。クロージャーを備えた「主にJava」が必要です。
または @danny_l / Danny Lagrouw による返信:
@headiusまたはBGGAプロトタイプは、Javaの将来のバージョンで「ボルトオン」になる可能性がありますか? それは役に立つかもしれません
それは本当に私も見たいものです。BGGA プロトタイプを最新の Java バージョンで動作させるために、ある種のバイトコード プリプロセッサを用意することはできませんか? つまり、scala、Groovy、および JRuby にはクロージャーがあり、有効なバイトコードを生成します!
私もそのお手伝いをしたいし、力を入れたいと思っています。どこから始めればいいのかよくわかりませんが。
(上記は、このトピックについて書いたブログ投稿の抜粋です)
他の人はこのアイデアについてどう思いますか?
groovy - Groovy クロージャーで「続行」をシミュレートするための最適なパターン
break
Groovy はandcontinue
をクロージャー内からサポートしていないようです。これをシミュレートする最良の方法は何ですか?
c - 関数ポインタ、クロージャ、ラムダ
私はちょうど今、関数ポインタについて学んでいます。このテーマに関する K&R の章を読んでいるときに、最初に私を襲ったのは、「ねえ、これはクロージャのようなものだ」ということでした。この仮定が根本的に間違っていることはわかっていましたが、オンラインで検索した後、この比較の分析は実際には見つかりませんでした.
では、C スタイルの関数ポインターがクロージャーやラムダと根本的に異なるのはなぜでしょうか? 私が知る限り、匿名で関数を定義するのではなく、関数ポインターがまだ定義済みの (名前付きの) 関数を指しているという事実に関係しています。
関数に関数を渡すと、関数に名前が付けられていない 2 番目のケースの方が、通常の日常的な関数が渡される最初のケースよりも強力であると見なされるのはなぜですか?
この 2 つを厳密に比較することがなぜ間違っているのか、どのように間違っているのか教えてください。
ありがとう。
javascript - JavaScript - 「クロージャー」の使用法を知るにはどうすればよいですか?
出典: フリー百科事典ウィキペディア: Closure (コンピューター サイエンス)
コンピューター サイエンスでは、クロージャーは、1 つ以上のバインドされた変数を含む環境で評価される関数です。呼び出されると、関数はこれらの変数にアクセスできます。クロージャーの明示的な使用は、関数型プログラミングや、ML や Lisp などの言語に関連付けられています。他の言語のオブジェクトなどの構造体もクロージャでモデル化できます。
これを JavaScript 内で使用するには、これがどのように適用されるかの例を教えてもらえますか?
lisp - s式からラムダを作成する
CommonLispの変数にS式をバインドしています。
ここで、呼び出されたときに、それが定義されたスコープ内の式を評価する関数を作成したいと思います。私はこれを試しました:
と
しかし、これらは両方とも問題を引き起こします。EVALはトップレベルでコードを評価するため、式に含まれる変数をキャプチャできません。LETフォームをEVALに入れることができないことに注意してください。解決策はありますか?
編集:それで、EVAL問題の解決策がない場合、他にどのようにそれを行うことができますか?
編集:私が何をしようとしているのかについて質問がありました。私はコンパイラを書いています。式が定義されている字句環境で変数が閉じられたs式を受け入れたい。確かにそれをマクロとして書く方が良いかもしれません。