タグ付けされた質問 「lambda」

AWSサービスには使用しないでください(これらの質問には[aws-lambda]を使用してください!)ラムダは、Lisp、C#、C ++、Lua、Python、Ruby、JavaScript、Javaなどのプログラミング言語の匿名関数またはクロージャです。(また、ラムダ式。)

12
関数ポインタ、クロージャ、ラムダ
私はちょうど今関数ポインタについて学んでいて、この主題に関するK&Rの章を読んでいたとき、最初に私を襲ったのは「ねえ、これはちょっと閉鎖のようなものだ」でした。私はこの仮定がどういうわけか根本的に間違っていることを知っていました、そしてオンラインで検索した後、私はこの比較の分析を実際には見つけませんでした。 では、なぜCスタイルの関数ポインターがクロージャーやラムダと根本的に異なるのでしょうか。私が知る限り、それは、関数を匿名で定義する慣行とは対照的に、関数ポインターがまだ定義された(名前付き)関数を指しているという事実と関係があります。 関数を関数に渡すことは、名前が付けられていない2番目のケースでは、渡される通常の日常の関数である最初のケースよりも強力であると見なされるのはなぜですか? 2つを非常に密接に比較するのが間違っている方法と理由を教えてください。 ありがとう。


4
このJava8ラムダがコンパイルに失敗するのはなぜですか?
次のJavaコードはコンパイルに失敗します。 @FunctionalInterface private interface BiConsumer<A, B> { void accept(A a, B b); } private static void takeBiConsumer(BiConsumer<String, String> bc) { } public static void main(String[] args) { takeBiConsumer((String s1, String s2) -> new String("hi")); // OK takeBiConsumer((String s1, String s2) -> "hi"); // Error } コンパイラーは以下を報告します: Error:(31, 58) java: incompatible …

4
c ++ 0x:参照によりパラメーターとしてラムダを受け取る適切な方法
int->int参照によってラムダパラメーターを受け取る関数を定義する正しい方法は何ですか? void f(std::function< int(int) >& lambda); または void f(auto& lambda); 最後の形式が正当な構文であるかどうかはわかりません。 ラムダパラメーターを定義する他の方法はありますか?

6
Java 8Lambda式-ネストされたクラスの複数のメソッドはどうですか
新機能については、http://www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.htmlで読んでいます。 私は以下の例を見ました: 匿名クラスの使用: button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Action Detected"); } }); ラムダの場合: button.addActionListener(e -> { System.out.println("Action Detected"); }); MouseListener匿名クラス内に複数のメソッドを実装したい場合、誰かがaで何をしますか。例: public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + …

6
引数にアンダースコアを付けたPythonのラムダ?
次のコードは何をしますか? a = lambda _:True インタラクティブプロンプトで読んでテストしたところ、常にを返す関数のようTrueです。 私はこれを正しく理解していますか?アンダースコア(_)も使用された理由を理解したいと思います。
84 python  lambda 

5
Stream.allMatch()が空のストリームに対してtrueを返すのはなぜですか?
同僚と私には、空のストリーム呼び出しallMatch()が返されるという想定に起因するバグがありましたfalse。 if (myItems.allMatch(i -> i.isValid()) { //do something } もちろん、ドキュメントを想定して読んでいないのは私たちのせいです。しかし、私が理解していないのはallMatch()、空のストリームのデフォルトの動作がなぜ戻るのかということですtrue。これの理由は何でしたか?同様にanyMatch()(逆に偽を返す)、この操作はモナドを出発不可欠な方法で使用され、おそらくで使用if声明。これらの事実を考慮すると、ほとんどの用途でallMatch()デフォルトでtrue空のストリームを使用することが望ましい理由はありますか?

4
Java8コンパレータ型推論によって非常に混乱している
特に静的メソッドの使用と、ラムダ式でparamタイプが必要かどうかに関して、Collections.sortとの違いを調べてきました。始める前に、たとえば問題を克服するためにメソッド参照を使用できることはわかっていますが、ここでのクエリは修正したいものではなく、答えが必要なものです。つまり、Javaコンパイラがこのように処理するのはなぜですか。 。list.sortComparatorSong::getTitle これらは私の発見です。我々が持っていると仮定しArrayListたタイプのをSong追加いくつかの曲で、3つの標準getメソッドがあります: ArrayList<Song> playlist1 = new ArrayList<Song>(); //add some new Song objects playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") ); playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") ); playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") ); これは、機能する両方のタイプのソートメソッドの呼び出しです。問題ありません。 Collections.sort(playlist1, Comparator.comparing(p1 -> p1.getTitle())); playlist1.sort( Comparator.comparing(p1 -> p1.getTitle())); チェーンを開始するとすぐthenComparingに、次のことが起こります。 Collections.sort(playlist1, …

3
ラムダ関数のヒントを入力することは可能ですか?
現在、Pythonでは、関数のパラメーターと戻り値の型は、次のように型ヒントを付けることができます。 def func(var1: str, var2: str) -> int: return var1.index(var2) これは、関数が2つの文字列を受け取り、整数を返すことを示しています。 ただし、この構文は、次のようなラムダと非常に混同されます。 func = lambda var1, var2: var1.index(var2) パラメータと戻り値の型の両方に型ヒントを入れてみましたが、構文エラーを引き起こさない方法がわかりません。 ラムダ関数のヒントを入力することは可能ですか?そうでない場合は、型ヒントラムダの計画がありますか、または何らかの理由(明らかな構文の競合以外)はありませんか?
83 python  lambda 

9
Java 8:改行とインデントを使用したラムダのフォーマット
ラムダインデントで実現したいのは次のとおりです。 複数行のステートメント: String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" }; List<String> strings = Arrays.stream(ppl) .filter( (x) -> { return x.contains("(M)"); } ).collect(Collectors.toList()); strings.stream().forEach(System.out::println); 1行のステートメント: List<String> strings = Arrays.stream(ppl) .map((x) -> x.toUpperCase()) .filter((x) -> x.contains("(M)")) .collect(Collectors.toList()); 現在、Eclipseは次のように自動フォーマットしています。 複数行のステートメント: String[] ppl …

3
ラムダを受け入れる関数を宣言するにはどうすればよいですか?
標準ライブラリ(などstd::find)でラムダを使用する方法を説明する多くのチュートリアルをインターネットで読みました。それらはすべて非常に興味深いものでしたが、自分の関数にラムダを使用する方法を説明するチュートリアルは見つかりませんでした。 例えば: int main() { int test = 5; LambdaTest([&](int a) { test += a; }); return EXIT_SUCCESS; } どのように宣言すればよいLambdaTestですか?その最初の引数のタイプは何ですか?次に、引数として「10」を渡す無名関数を呼び出すにはどうすればよいですか?
82 c++  lambda  c++11 

10
Java 8:ラムダの反復をカウントするための好ましい方法は?
私はよく同じ問題に直面します。ラムダの外部で使用するために、ラムダの実行をカウントする必要があります。例えば: myStream.stream().filter(...).forEach(item->{ ... ; runCount++); System.out.println("The lambda ran "+runCount+"times"); 問題は、runCountがfinalである必要があるため、intにすることはできないということです。不変であるため、整数にすることはできません。クラスレベルの変数(つまりフィールド)にすることもできますが、このコードブロックでのみ必要になります。私はさまざまな方法があることを知っています、私はこれのためにあなたの好ましい解決策は何ですか?AtomicIntegerまたは配列参照または他の方法を使用していますか?

6
forEachループJava8 forMapエントリセット
マップエントリセットの各ループでjava7からjava8まで、各ループの古い従来型を変換しようとしていますが、エラーが発生します。これが私が変換しようとしているコードです: for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } これが私が行った変更です: map.forEach( Map.Entry<String, String> entry -> { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); }); 私もこれをやってみました: Map.Entry<String, String> entry; map.forEach(entry -> { System.out.println("Key : …
82 java  lambda  java-8 

5
Dispatcher.BeginInvoke:ラムダをSystem.Delegateに変換できません
電話をかけようとしていますSystem.Windows.Threading.Dispatcher.BeginInvoke。メソッドのシグネチャは次のとおりです。 BeginInvoke(Delegate method, params object[] args) デリゲートを作成する代わりに、ラムダを渡そうとしています。 _dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } ); コンパイラエラーが発生し、 ラムダをSystem.Delegateに変換できません。 デリゲートの署名は、オブジェクトをパラメーターとして受け取り、voidを返します。私のラムダはこれと一致しますが、機能していません。何が足りないのですか?

8
コンストラクターに引数を持つJava8サプライヤー
サプライヤーが引数なしのコンストラクターのみをサポートするのはなぜですか? デフォルトのコンストラクターが存在する場合、これを行うことができます。 create(Foo::new) しかし、唯一のコンストラクターが文字列を取る場合、私はこれをしなければなりません: create(() -> new Foo("hello"))

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.