标签: lambda

C++ - [=]做什么?

我想知道是什么[=]?这是一个简短的例子

template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
    return [=] (T input) -> T { return (offset + input) * factor; };
}

auto milesToKm = makeConverter(1.60936, 0.0);
Run Code Online (Sandbox Code Playgroud)

如何使用代码[]而不是[=]?

std::function<T (T)>
Run Code Online (Sandbox Code Playgroud)

意味着一个函数原型,它(T)作为参数和返回类型T?

c++ lambda c++11

91
推荐指数
2
解决办法
1万
查看次数

为什么lambda的大小为1个字节?

我正在处理C++中一些lambda的记忆,但我对它们的大小感到有些困惑.

这是我的测试代码:

#include <iostream>
#include <string>

int main()
{
  auto f = [](){ return 17; };
  std::cout << f() << std::endl;
  std::cout << &f << std::endl;
  std::cout << sizeof(f) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里运行它:http://fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598

ouptut是:

17
0x7d90ba8f626f
1
Run Code Online (Sandbox Code Playgroud)

这表明我的lambda的大小是1.

  • 这怎么可能?

  • lambda至少应该是指向它的实现的指针吗?

c++ lambda sizeof c++11 c++14

89
推荐指数
5
解决办法
7348
查看次数

C++ 11 lambda实现和内存模型

我想了解一些关于如何正确思考C++ 11闭包以及std::function如何实现它们以及如何处理内存的信息.

虽然我不相信过早优化,但我确实习惯在编写新代码时仔细考虑我的选择对性能的影响.我还进行了大量的实时编程,例如微控制器和音频系统,其中要避免非确定性的存储器分配/解除分配暂停.

因此,我想更好地了解何时使用或不使用C++ lambdas.

我目前的理解是没有捕获闭包的lambda就像一个C回调.但是,当通过值或引用捕获环境时,将在堆栈上创建匿名对象.当必须从函数返回值闭包时,将其包装进去std::function.在这种情况下闭包内存会发生什么?它是从堆栈复制到堆?它是否在被释放时std::function被释放,即它是否被引用计数为std::shared_ptr?

我想在实时系统中我可以建立一个lambda函数链,将B作为一个连续参数传递给A,以便A->B创建一个处理管道.在这种情况下,A和B闭包将被分配一次.虽然我不确定这些是否会在堆栈或堆上分配.然而,一般来说,这在实时系统中使用似乎是安全的.另一方面,如果B构造一些它返回的lambda函数C,那么C的内存将被重复分配和释放,这对于实时使用是不可接受的.

在伪代码中,一个DSP循环,我认为这将是实时安全的.我想执行处理块A然后执行B,其中A调用它的参数.这两个函数都返回std::function对象,因此f它将是一个std::function对象,其环境存储在堆上:

auto f = A(B);  // A returns a function which calls B
                // Memory for the function returned by A is on the heap?
                // Note that A and B may maintain a state
                // via mutable value-closure!
for (t=0; t<1000; t++) {
    y = f(t)
}
Run Code Online (Sandbox Code Playgroud)

我认为在实时代码中使用它可能很糟糕:

for (t=0; t<1000; t++) {
    y = A(B)(t); …
Run Code Online (Sandbox Code Playgroud)

c++ memory lambda c++11

88
推荐指数
2
解决办法
2万
查看次数

如何将Django模型字段的默认值设置为函数调用/可调用(例如,相对于模型对象创建时间的日期)

编辑:

如何将Django字段的默认设置为每次创建新模型对象时评估的函数?

我想做类似下面的事情,除了在这段代码中,代码被评估一次并将默认设置为创建的每个模型对象的相同日期,而不是每次创建模型对象时评估代码:

from datetime import datetime, timedelta
class MyModel(models.Model):
  # default to 1 day from now
  my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)



原版的:

我想为函数参数创建一个默认值,使其成为动态的,并在每次调用函数时调用和设置.我怎样才能做到这一点?例如,

from datetime import datetime
def mydate(date=datetime.now()):
  print date

mydate() 
mydate() # prints the same thing as the previous call; but I want it to be a newer value
Run Code Online (Sandbox Code Playgroud)

具体来说,我想在Django中这样做,例如,

from datetime import datetime, timedelta
class MyModel(models.Model):
  # default to 1 day from now
  my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)

django parameters lambda default django-models

88
推荐指数
4
解决办法
6万
查看次数

如何使用LINQ将List <string>中的所有字符串转换为小写?

昨天我在StackOverflow上的一个回复中看到了一个代码片段,这引起了我的兴趣.它是这样的:

 List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};

 myList.ForEach(d=>d.ToLower());
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用它将myList中的所有项目转换为小写.但是,它不会发生...运行此命令后,myList中的大小不变.

所以我的问题是,是否有一种方法,使用LINQ和Lambda表达式轻松地迭代并以类似于此的方式修改列表的内容.

谢谢,马克斯

c# linq foreach lambda

87
推荐指数
3
解决办法
8万
查看次数

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

在下面的代码中,第一次调用foo是不明确的,因此无法编译.

第二个,+在lambda之前添加,解析为函数指针重载.

#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)
}
Run Code Online (Sandbox Code Playgroud)

+这里的符号是什么?

lambda overloading c++11

87
推荐指数
1
解决办法
6710
查看次数

在科特林的`forEach`中`break`和`continue`

科特林具有非常不错的迭代功能,如forEach或repeat,但我不能让break和continue运营商与他们(包括本地和非本地)的工作:

repeat(5) {
    break
}

(1..5).forEach {
    continue@forEach
}
Run Code Online (Sandbox Code Playgroud)

目标是模拟通常的循环,其功能语法尽可能接近.在某些旧版本的Kotlin中肯定是可能的,但我很难重现语法.

问题可能是标签的错误(M12),但我认为第一个例子应该可行.

在我看来,我已经阅读过关于特殊技巧/注释的某处,但我找不到关于这个主题的任何参考.可能如下所示:

public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
    for (index in 0..times - 1) {
        body(index)
    }
}
Run Code Online (Sandbox Code Playgroud)

foreach lambda loops kotlin

87
推荐指数
7
解决办法
4万
查看次数

什么是lambda语言?

我正在阅读"JavaScript:The Good Parts",作者提到JavaScript是第一个推出的lambda语言.

JavaScript的函数是具有(主要)词法范围的第一类对象.JavaScript是第一个成为主流的lambda语言.在内心深处,JavaScript与Lisp和Scheme有更多共同点,而不是Java.这是C的服装中的Lisp.这使得JavaScript成为非常强大的语言.

我没有得到什么是lambda语言.这种语言有哪些属性,它与Java,C,C++和Php等语言有什么不同?

javascript lambda

86
推荐指数
2
解决办法
3万
查看次数

修改lambda内部的局部变量

修改局部变量forEach会产生编译错误:

正常

    int ordinal = 0;
    for (Example s : list) {
        s.setOrdinal(ordinal);
        ordinal++;
    }
Run Code Online (Sandbox Code Playgroud)

随着Lambda

    int ordinal = 0;
    list.forEach(s -> {
        s.setOrdinal(ordinal);
        ordinal++;
    });
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

java lambda java-8

86
推荐指数
5
解决办法
8万
查看次数

使用包含在实体框架4中的lambda表达式

我见过很多关于如何克服这个问题的文章,都与CTP4有关,或者添加了我自己的扩展方法.

是否有一个"官方"EF4包含方式在内部使用lambda表达式(对于第一级关系以及第二级和更多级别)或者它最终是否包含在RTM中?

它有一个 - 我很乐意学习如何做到这一点,因为现在在我的代码中使用lambda表达式(使用#system.data.entity#system.data.linq)仍然给了我:

无法将lambda表达式转换为类型'string',因为它不是委托类型:

var customers = from c in
context.Customers.Include(c=>c.Phone)
Run Code Online (Sandbox Code Playgroud)

c# lambda entity-framework-4

85
推荐指数
3
解决办法
7万
查看次数