关于常用的Lambda(拉姆达)表达式

转载 2015年11月20日 13:48:14
ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:
[capture list] (parameter list) ->return type { function body }
 
其中除了“[ ]”(其中捕获列表可以为空,可以是this)和“复合语句”(相当于具名函数定义的函数体),其它都是可选的。它的类型是唯一的具有成员operator()的非联合的类类型,称为闭包类型(closure type):闭包是可以包含自由(未绑定到特定对象)变量的代码块。
 
示例一个触摸开始事件:
rockerRangeEvent->onTouchBegan=[this](Touch* touch,Event* e){
    
    return false;
};
 
C++中,一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda必须使用尾置返回来指定返回类型,用于确定表达式是否再往下执行?
 
一个更清楚详细的示例:例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数
boolcompare(int&a,int&b)
{
    return a>b;//降序排序
}

然后,再这样调用:
 
sort(a,a+n,compare);
 
然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写:
sort(a,a+n,[](inta,intb){returna>b;});//降序排序
 
ISO C++14支持基于类型推断的泛型lambda表达式。上面的排序代码可以这样写:
sort(a,a+n,[](constauto&a,constauto&b){returna>b;});//降序排序:不依赖a和b的具体类型

由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:
autof=[](inta,intb){returna>b;};

 
以上,Lambda表达式有助于重构代码,避免书写过于复杂的参数类型。特别地,不需要显式指出参数类型使使用高阶函数变得更加容易。

java8新特性(拉姆达表达式lambda)

一、函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Ru...
  • qq_35805528
  • qq_35805528
  • 2016年11月21日 21:00
  • 4773

函数式编程之根-拉姆达运算/演算(λ-calculus)

学习函数式编程的大图(big map)/鸟瞰图
  • yqj2065
  • yqj2065
  • 2016年05月08日 14:38
  • 2517

java8新特性(拉姆达表达式lambda)

一、函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Ru...
  • qq_35805528
  • qq_35805528
  • 2016年11月21日 21:00
  • 4773

拉姆达表达式转对象(太给力啦!)

在自己做框架时候遇到一个对条件拼装问题。用lambda写法却无法转换成对象加以组合。直到找到下面这些代码 那么可以直接将lambda表达式解析成SQL条件语句 WhereClip whe...
  • ysq5202121
  • ysq5202121
  • 2012年04月23日 18:05
  • 4331

EasyUI 之 DataGrid利用用拉姆达表达式实现分页查询

在上一篇博客《EasyUI 之 DataGrid的两种赋值方法》中,我们介绍了给DataGrid赋值的两种方法,同时我们也留下一个问题,分页效果没有真正的实现,今天我们就来给大家讲讲MVC+EasyU...
  • u010786678
  • u010786678
  • 2015年01月28日 10:15
  • 2196

拉姆达表达式学习(2)

本文转载自:http://www.cnblogs.com/zhouji432600/archive/2010/05/30/1747383.html在.net3.5里面,委托的定义和实现被大大的简化了!...
  • xintingandzhouyang
  • xintingandzhouyang
  • 2011年07月13日 13:12
  • 2487

拉姆达表达式C#的新特性

  • 2009年12月02日 19:49
  • 477KB
  • 下载

匿名函数 和 拉姆达表达式

匿名函数                  匿名方法是创建与特定委托实例相关联的未命名代码块的一种方法。可以通过在代码块后面跟上delegate关键字来创建匿名方法。               ...
  • vincent_void
  • vincent_void
  • 2012年02月18日 12:05
  • 5585

C# 匿名方法和拉姆达表达式

匿名方法本质上是一传递给委托的代码块,是使用委托的另一种方法。 规则: 1、匿名方法中不能使用跳转语句跳至次匿名方法的外部,反之亦然;匿名方法外部的跳转语句也不能跳转到匿名方法的内部; 2、在匿名方法...
  • qq373591361
  • qq373591361
  • 2013年04月11日 17:32
  • 680

拉姆达表达式学习(1)

本文转载自:http://www.cnblogs.com/zhouji432600/archive/2010/05/28/1746228.html如果项目里面需要经常对一系列的同类型集合进行操作,如对...
  • xintingandzhouyang
  • xintingandzhouyang
  • 2011年07月13日 13:09
  • 4880
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于常用的Lambda(拉姆达)表达式
举报原因:
原因补充:

(最多只允许输入30个字)