Tag: lambda

lambda表达式在每次执行时都会在堆上创建一个对象吗?

当我使用Java 8的新语法糖来迭代一个集合时,比如 myStream.forEach(item -> { // do something useful }); 这不等于下面的“旧语法”片段吗? myStream.forEach(new Consumer<Item>() { @Override public void accept(Item item) { // do something useful } }); 这是否意味着每次迭代集合时都会在堆上创建一个新的匿名Consumer对象? 这需要多少堆空间? 它有什么性能影响? 这是否意味着在迭代大型多级数据结构时,我宁愿使用旧式的循环?

Tkinter分配按钮命令与lambda循环

我试图创建几个按钮(与一个)像这样: def a(self, name): print name users = {"Test":"127.0.0.0", "Test2":"128.0.0.0"} row = 1 for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda: self.a(name)) user_button.grid(row = row, column = 0) row+=1 并为每个按钮获取自己的参数(测试获得测试和Test2得到Test2),但是当我按下按钮,他们都打印“测试2”,这意味着他们正在使用相同的参数相同的功能。 我该如何解决这个问题?

传递lambda作为函数指针

是否有可能传递一个lambda函数作为函数指针? 如果是这样,我必须做错误的东西,因为我得到一个编译错误。 考虑下面的例子 using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn _dec; }; int main() { int x = 5; Decide greaterThanThree{ [x](){ return x > 3; } }; return 0; } 当我尝试编译这个 ,我得到以下编译错误: In function 'int main()': 17:31: error: the value of 'x' is not usable in […]