Questions tagged «lambda»

不要使用AWS服务(对于这些问题,请使用[aws-lambda]!)Lambda是匿名函数或编程语言(例如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java)中的闭包。(也就是lambda表达式。)

6
在C ++ 11中用“ auto”推论得出的lambda类型是什么?
我认为lambda的类型是函数指针。当我执行以下测试时,我发现它是错误的(演示)。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上面的代码缺少任何意义吗?如果不是,那么typeof用auto关键字推导的lambda表达式是什么?
141 c++  lambda  c++11  typeof  auto 

7
在Java 8中,如何使用lambda将Map <K,V>转换为另一个Map <K,V>?
我刚刚开始研究Java 8,并尝试了lambda,我认为我想尝试重写最近写的一件非常简单的东西。我需要将字符串映射到列映射转换为另一个字符串映射到列映射,其中新映射中的列是第一个映射中列的防御性副本。列具有复制构造函数。到目前为止,我最接近的是: Map&lt;String, Column&gt; newColumnMap= new HashMap&lt;&gt;(); originalColumnMap.entrySet().stream().forEach(x -&gt; newColumnMap.put(x.getKey(), new Column(x.getValue()))); 但我敢肯定,必须有更好的方法来完成这项工作,对于您的建议我将不胜感激。
140 java  map  lambda  java-8  java-stream 

7
为什么不能将匿名方法分配给var?
我有以下代码: Func&lt;string, bool&gt; comparer = delegate(string value) { return value != "0"; }; 但是,以下内容无法编译: var comparer = delegate(string value) { return value != "0"; }; 为何编译器无法找出它是Func&lt;string, bool&gt;?它采用一个字符串参数,并返回一个布尔值。相反,它给了我错误: 无法将匿名方法分配给隐式类型的局部变量。 我有一个猜测,那就是如果var版本已编译,如果我具有以下内容,它将缺乏一致性: var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) { return false; }; 由于Func &lt;&gt;最多只允许使用4个参数(在.NET 3.5中,这是我正在使用的参数),因此上述方法没有意义。也许有人可以澄清这个问题。谢谢。

6
Java中的可选orElse可选
我一直在使用Java 8中的新Optional类型,并且遇到了似乎不受功能支持的常见操作:“ orElseOptional” 考虑以下模式: Optional&lt;Result&gt; resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional&lt;Result&gt; resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } 这种模式有多种形式,但是归结为希望在一个可选函数上使用一个“ orElse”,该函数需要一个函数来生成一个新的可选变量,只有当当前的不存在该函数时才调用它。 它的实现如下所示: public Optional&lt;T&gt; orElse(Supplier&lt;Optional&lt;? extends T&gt;&gt; otherSupplier) { return value != null ? this : other.get(); } 我很好奇是否有这种方法不存在的原因,是否以一种意想不到的方式使用Optional,以及人们想出了什么其他方式来处理这种情况。 我应该说,我认为涉及定制实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。 另外,如果有人知道,这种方法是否会包含在JDK 9中,我可以在哪里提出这种方法?对我来说,这似乎是对API的明显忽略。
137 java  lambda  java-8  optional  java-9 

2
这个对象生存期延长关闭是C#编译器错误吗?
我当时回答的问题有关闭的可能(合法)扩展对象的生命周期,当我遇到了一些非常奇怪的代码生成的C#编译器的部分(4.0,如果该事项)。 我能找到的最短的再现是: 创建一个lambda来捕获本地,同时调用包含类型的 静态方法。 将生成的委托引用分配给包含对象的实例字段。 结果:编译器在没有理由的情况下创建了一个引用创建lambda的对象的闭包对象-委托的“内部”目标是静态方法,而lambda-createing对象的实例成员不需要执行委托时(不被)触碰。实际上,编译器的行为就像程序员this无故捕获的一样。 class Foo { private Action _field; public void InstanceMethod() { var capturedVariable = Math.Pow(42, 1); _field = () =&gt; StaticMethod(capturedVariable); } private static void StaticMethod(double arg) { } } 从发行版本生成的代码(反编译为“简单” C#)看起来像这样: public void InstanceMethod() { &lt;&gt;c__DisplayClass1 CS$&lt;&gt;8__locals2 = new &lt;&gt;c__DisplayClass1(); CS$&lt;&gt;8__locals2.&lt;&gt;4__this = this; // …

4
是否可以找出lambda的参数类型和返回类型?
给定一个lambda,是否可以弄清楚它的参数类型和返回类型?如果是,怎么办? 基本上,我希望lambda_traits可以通过以下方式使用它: auto lambda = [](int i) { return long(i*10); }; lambda_traits&lt;decltype(lambda)&gt;::param_type i; //i should be int lambda_traits&lt;decltype(lambda)&gt;::return_type l; //l should be long 其背后的动机是,我想lambda_traits在接受lambda作为参数的函数模板中使用,并且我需要知道函数内部的参数类型和返回类型: template&lt;typename TLambda&gt; void f(TLambda lambda) { typedef typename lambda_traits&lt;TLambda&gt;::param_type P; typedef typename lambda_traits&lt;TLambda&gt;::return_type R; std::function&lt;R(P)&gt; fun = lambda; //I want to do this! //... } 就目前而言,我们可以假设lambda正好采用了一个参数。 …

3
如何用lambda排序?
sort(mMyClassVector.begin(), mMyClassVector.end(), [](const MyClass &amp; a, const MyClass &amp; b) { return a.mProperty &gt; b.mProperty; }); 我想使用lambda函数对自定义类进行排序,以代替绑定实例方法。但是,上面的代码会产生错误: 错误C2564:“ const char *”:将函数样式转换为内置类型只能使用一个参数 与配合使用效果很好boost::bind(&amp;MyApp::myMethod, this, _1, _2)。
135 c++  sorting  lambda  char  const 

7
lambda表达式中使用的变量应为final或有效为final
lambda表达式中使用的变量应为final或有效为final 当我尝试使用calTz它时会显示此错误。 private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) { try { cal.getComponents().getComponents("VTIMEZONE").forEach(component -&gt; { VTimeZone v = (VTimeZone) component; v.getTimeZoneId(); if (calTz == null) { calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue()); } }); } catch (Exception e) { log.warn("Unable to determine ical timezone", e); } return null; }
134 java  lambda 

1
Java中的“ SAM类型”是什么?
在阅读Java-8规范后,我不断看到对“ SAM类型”的引用。我还没有找到关于这是什么的明确解释。 什么是SAM类型?什么时候可以使用的示例场景是什么?
133 java  lambda  java-8 

9
C#中Action委托的使用
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我曾与C#中的“行动代表”一起工作,希望对他们有更多的了解,并思考他们可能在什么地方有用。 有人使用过动作代表吗,为什么?还是可以举一些可能有用的例子?
132 c#  lambda  delegates  action 



2
Lambda捕获和具有相同名称的参数-谁遮蔽了另一个?(c声与gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0及更高版本打印出“您正在使用clang ++!” 并警告捕获 foo未使用。 g ++ 4.9.0及更高版本打印出“您正在使用g ++!” 并警告未使用该参数 foo。 哪种编译器更准确地遵循C ++标准? 魔盒示例

6
Lambda回归自我:这合法吗?
考虑这个相当无用的程序: #include &lt;iostream&gt; int main(int argc, char* argv[]) { int a = 5; auto it = [&amp;](auto self) { return [&amp;](auto b) { std::cout &lt;&lt; (a + b) &lt;&lt; std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } 基本上,我们试图制作一个返回自身的lambda。 MSVC编译程序,然后运行 gcc编译程序,并进行段错误 clang拒绝该程序并显示一条消息: error: function 'operator()&lt;(lambda at lam.cpp:6:13)&gt;' with deduced return type cannot …

8
当作为纯Delegate参数提供时,为什么必须强制转换lambda表达式
采取方法System.Windows.Forms.Control.Invoke(Delegate方法) 为什么会给出编译时错误: string str = "woop"; Invoke(() =&gt; this.Text = str); // Error: Cannot convert lambda expression to type 'System.Delegate' // because it is not a delegate type 但这工作正常: string str = "woop"; Invoke((Action)(() =&gt; this.Text = str)); 该方法何时需要普通代表?
124 c#  c#-3.0  delegates  lambda 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.