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

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

5
ラムダ自体内のC ++ラムダ関数のアドレスを取得するにはどうすればよいですか?
それ自体の中でラムダ関数のアドレスを取得する方法を理解しようとしています。これがサンプルコードです: []() { std::cout << "Address of this lambda function is => " << ???? }(); ラムダを変数にキャプチャしてアドレスを出力できることはわかっていますが、この無名関数が実行されているときにそれを実行したいと考えています。 これを行う簡単な方法はありますか?
53 c++  c++11  lambda  c++14  c++17 

4
ラムダの戻り値の型がコンパイル時にチェックされないのはなぜですか?
使用されたメソッド参照は戻り型を持っていIntegerます。ただし、String次の例では互換性がありません。 メソッドwith宣言を修正して、手動でキャストせずにメソッド参照型を安全にする方法は? import java.util.function.Function; public class MinimalExample { static public class Builder<T> { final Class<T> clazz; Builder(Class<T> clazz) { this.clazz = clazz; } static <T> Builder<T> of(Class<T> clazz) { return new Builder<T>(clazz); } <R> Builder<T> with(Function<T, R> getter, R returnValue) { return null; //TODO } } static public interface MyInterface …

6
C#ラムダを宣言してすぐに呼び出す方法はありますか?
ラムダ関数を宣言してすぐに呼び出すことが可能です。 Func<int, int> lambda = (input) => { return 1; }; int output = lambda(0); 私は一行でそうすることが可能かどうか疑問に思っています、例えば int output = (input) => { return 1; }(0); これにより、「メソッド名が必要です」というコンパイラエラーが発生します。へのキャストもFunc<int, int>機能しません: int output = (Func<int, int>)((input) => { return 1; })(0); 同じエラーが発生し、以下に述べる理由により、入力引数の型(最初のint)を明示的に指定する必要がないようにしたいと思います。 たぶん、コードを直接埋め込むだけでなく、なぜこれを実行したいのか疑問に思うでしょうint output = 1;。その理由は次のとおりです。を使用してSOAP Webサービスの参照を生成しましsvcutilた。ネストされた要素が原因で、非常に長いクラス名が生成されるため、入力する必要がありません。だから代わりに var o = await client.GetOrderAsync(request); return new …
29 c#  lambda 

3
Invokeメソッドを使用するとコンパイルが正常になり、Func <int、int>を直接返すと正常にコンパイルできないのはなぜですか?
私はこのケースを理解していません: public delegate int test(int i); public test Success() { Func&lt;int, int&gt; f = x =&gt; x; return f.Invoke; // &lt;- code successfully compiled } public test Fail() { Func&lt;int, int&gt; f = x =&gt; x; return f; // &lt;- code doesn't compile } Invokeメソッドを使用するとコンパイルが正常になり、csharp Func&lt;int,int&gt;直接戻るとコンパイルできないのはなぜですか?
28 c#  lambda  delegates 

2
「これ」がラムダによってキャプチャされた場合、明示的に使用する必要がありますか?
thisラムダでのキャプチャが明示的に使用することがわかった例。例えば: capturecomplete = [this](){this-&gt;calstage1done();}; しかし、それを暗黙的に使用することも可能であるようです。例えば: capturecomplete = [this](){calstage1done();}; これをg ++でテストし、コンパイルしました。 これは標準のC ++ですか?(もしそうなら、どのバージョンか)、またはそれは何らかの拡張形式ですか?

1
親スコープの変数と同じ名前の子変数を宣言できるのはなぜですか?
同じ名前の変数がすでにある関数内で宣言されたアクションのパラメーターとして変数名を誤って再利用するコードを最近書きました。例えば: var x = 1; Action&lt;int&gt; myAction = (x) =&gt; { Console.WriteLine(x); }; 重複を見つけたとき、コードが完全にコンパイルされて実行されたことに驚きました。これは、C#のスコープについて知っていることに基づいて期待する動作ではありません。Laogda Scope Clarificationなど、いくつかの簡単なグーグル検索により、同様のコードがエラーを生成することを訴えるSOの質問が表示されました。(念のため、サンプルコードをIDEに貼り付けて、実行されるかどうかを確認しました。完全に実行されます。)さらに、Visual Studioで[名前の変更]ダイアログに入ると、最初の名前が​​名前の競合として強調表示されます。x このコードはなぜ機能するのですか?Visual Studio 2019でC#8を使用しています。

3
参照からグローバル変数へのラムダ関数の可変キャプチャの動作の違い
ラムダを使用して、可変キーワードでグローバル変数への参照をキャプチャし、ラムダ関数の値を変更すると、コンパイラによって結果が異なることがわかりました。 #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m = n; return [m] () mutable -&gt; int { m += 123; return m; }; } int main() { int x = n; int y = f()(); int z = n; printf("%d %d %d\n", x, y, …

2
ラムダマクロはどのようにラムダを作成しますか?
GitHubでこのコードを見つけましたが、よくわかりませんでした。 #define lambda(ret_type, _body) ({ ret_type _ _body _; }) 次に: int (*max)(int, int) = lambda(int, (int x, int y) { return x &gt; y ? x : y; }); int max_value = max(1, 2); // max_value is 2 内部でアンダースコアは何をしていて、#defineどのようにして関数ポインタを返しますか?

3
ラムダクロージャの左辺値を右辺値参照パラメータとして渡すことができます
lvalueラムダクロージャーは常にrvalue関数パラメーターとして渡すことができることがわかりました。 次の簡単なデモをご覧ください。 #include &lt;iostream&gt; #include &lt;functional&gt; using namespace std; void foo(std::function&lt;void()&gt;&amp;&amp; t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function object std::function&lt;void()&gt; fn2 = []{}; foo(fn2); // compile error return 0; } …

3
ラムダ関数をオーバーロードする
単純なローカルラムダ関数をオーバーロードする方法は? 元の問題のSSE: #include &lt;iostream&gt; #include &lt;map&gt; void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map&lt;char, int&gt; table{ {'a', 0}, {'b', 1}, {'c', 2}, {'d', 3}, {'e', 4}, {'f', 5}, …

1
キャプチャレスラムダは標準で空であることが保証されていますか?
テンプレート関数で他のラムダから空の(キャプチャレス)ラムダを識別する方法を探しています。現在C ++ 17を使用していますが、C ++ 20の回答にも興味があります。 私のコードは次のようになります: template&lt;typename T&gt; auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr (/* is captureless */) { // do stuff } } C ++標準(17または20)で、関数ポインターに変換可能なキャプチャレスラムダでもstd::is_empty歩留まりがtrueになることが保証されていますか? 例としてこのコードを見てください: auto a = []{}; // captureless auto b = [c = 'z']{}; // has captures …
12 c++  lambda  c++17  c++20 

1
型パラメーターがメソッドパラメーターよりも強いのはなぜですか
なぜですか public &lt;R, F extends Function&lt;T, R&gt;&gt; Builder&lt;T&gt; withX(F getter, R returnValue) {...} より厳しい public &lt;R&gt; Builder&lt;T&gt; with(Function&lt;T, R&gt; getter, R returnValue) {...} これは、ラムダの戻り値の型がコンパイル時にチェックされない理由のフォローアップです。私は次のwithX()ような方法を使用して見つけました .withX(MyInterface::getLength, "I am not a Long") 必要なコンパイル時エラーを生成します。 タイプBuilderExample.MyInterfaceのgetLength()のタイプは長く、これは記述子の戻りタイプと互換性がありません:文字列 メソッドを使用している間with()はしません。 完全な例: import java.util.function.Function; public class SO58376589 { public static class Builder&lt;T&gt; { public &lt;R, F extends Function&lt;T, …

3
複数の一致するターゲットタイプを持つラムダ式のメソッドシグネチャの選択
質問に答えていて、説明できないシナリオに出くわしました。このコードを考えてみましょう: interface ConsumerOne&lt;T&gt; { void accept(T a); } interface CustomIterable&lt;T&gt; extends Iterable&lt;T&gt; { void forEach(ConsumerOne&lt;? super T&gt; c); //overload } class A { private static CustomIterable&lt;A&gt; iterable; private static List&lt;A&gt; aList; public static void main(String[] args) { iterable.forEach(a -&gt; aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -&gt; aList.add(a)); //OK } } …
11 java  generics  lambda  javac  ecj 

1
Java-8のメソッドリファレンスとジェネリックス
ジェネリック型と組み合わせたメソッド参照に関する問題に直面しています。 オーバーロードされたメソッドを呼び出す必要があるコードがありますが、エラーで失敗します: 値m1()を解決できません 問題がどこにあるのかを明確にするために、問題を単純化しました。 次のコードは失敗します。 public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } &lt;E extends I1, T&gt; void setValue(BiConsumer&lt;E, T&gt; cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void m1(int value) { …
11 java  generics  lambda  java-8 

5
ラムダのC ++三項割り当て
次のスニペットがコンパイルされない理由は何ですか?「エラー:オペランドの?:タイプが異なります」というエラーが表示されます。 auto lambda1 = [&amp;](T&amp; arg) { ... }; auto lambda2 = [&amp;](T&amp; arg) { ... }; auto lambda = condition ? lambda1 : lambda2;

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