Tag: lambda

recursionlambdaexpression式遍历C#中的一棵树

有人可以告诉我如何实现recursionlambdaexpression式来遍历C#中的树结构。

试图了解lambda

试图理解C ++中的lambdas,我不明白的是: int multiplier = 5; auto timesFive = [multiplier](int a) { return a * multiplier; }; std::cout << timesFive(2) << '\n'; // Prints 10 multiplier = 15; std::cout << timesFive(2) << '\n'; // Still prints 2*5 == 10 (???) – Should it be 30? 当程序第二次调用timesFive()时,我期望结果是30.但为什么结果Still prints 2*5 == 10 ,而不prints 2*15 == 30 ? […]

本地函数与Lambda C#7.0

我期待在C#7.0中的新实现,我发现有趣的是,他们已经实现了本地函数,但我无法想象一个局部函数将优于lambdaexpression式,两者之间有什么区别。 我明白lambdas是anonymous函数,而本地函数不是,但我不能找出一个真实世界的场景,其中本地函数比lambdaexpression式有优势 任何例子将不胜感激。 谢谢。

如何调用一个类variables的闭包?

class MyClass { var $lambda; function __construct() { $this->lambda = function() {echo 'hello world';}; // no errors here, so I assume that this is legal } } $myInstance = new MyClass(); $myInstance->lambda(); //Fatal error: Call to undefined method MyClass::lambda() 那么达到类variables的正确语法是什么?

如何使用匿名方法返回值?

这失败了 string temp = () => {return "test";}; 与错误 无法将lambdaexpression式转换为“string”types,因为它不是委托types 错误意味着什么,我该如何解决?

使用+解决lambda函数指针和std :: function的模糊过载

在下面的代码中,对foo的第一个调用是不明确的,因此无法编译。 第二,在lambda之前加上+ ,parsing为函数指针重载。 #include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} ); // not ambiguous (calls the function pointer overload) } 在这里做的记号是什么?

有没有办法比较lambdas?

假设我有一个使用lambdaexpression式(闭包)定义的对象列表。 有没有办法检查他们,以便他们可以比较? 我最感兴趣的代码是 List<Strategy> strategies = getStrategies(); Strategy a = (Strategy) this::a; if (strategies.contains(a)) { // … 完整的代码是 import java.util.Arrays; import java.util.List; public class ClosureEqualsMain { interface Strategy { void invoke(/*args*/); default boolean equals(Object o) { // doesn't compile return Closures.equals(this, o); } } public void a() { } public void b() { } public […]

是否暗示所有的局部variables将被复制?

当我用[=]写一个lambda时,是否意味着我所有的局部variables都将被复制到创build的结构的成员中,或者我可以假设只有那些实际在lambda中使用的variables? 例如: void f() { vector<int> v(10000); const int n = 5; const int DivByNCnt = count_if(istream_iterator<int>(cin), istream_iterator<int>(), [=](int i) { return i % n == 0; }); } 以下哪一项是真的? n和v都将被复制 n将被复制,v不会 n将被复制,v可能会或可能不会被复制,取决于implmenentation /优化设置。 假设参数的缘故,vector的拷贝构造函数有副作用。

如何在Objective-C中编写lambda方法?

如何在Objective-C中编写lambda方法?

为什么constvariables有时不需要被lambda捕获?

考虑下面的例子: #include <cstdlib> int main() { const int m = 42; [] { m; }(); // OK const int n = std::rand(); [] { n; }(); // error: 'n' is not captured } 为什么我需要在第二个lambda中捕获n ,而在第一个lambda中不是m ? 我在C ++ 14标准中检查了第5.1.2节( Lambdaexpression式 ),但我无法find一个理由。 你能指出我的解释这一段吗? 更新:我观察到GCC 6.3.1和7(trunk)的行为。 在这两种情况下,Clang 4.0和5(trunk)都会失败并发生错误( variable 'm' cannot be implicitly captured in a lambda […]