游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1719|回复: 1

发现

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2009-12-22 09:19:00 | 显示全部楼层 |阅读模式
C++支持lambda了。雪中送炭啊 [em2]

12

主题

172

帖子

174

积分

注册会员

Rank: 2

积分
174
发表于 2009-12-22 22:55:00 | 显示全部楼层

Re:发现

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。
  所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示:
  delegate int del(int i);
  del myDelegate = x => x * x;
  int j = myDelegate(5); //j = 25
  创建表达式目录树类型:
  using System.Linq.Expressions;
  // ...
  Expression<del> = x => x * x;
  => 运算符具有与赋值运算符 (=) 相同的优先级,并且是右结合运算符。
  Lambda 用在基于方法的 LINQ 查询中,作为诸如 Where 和 Where 等标准查询运算符方法的参数。
  使用基于方法的语法在 Enumerable 类中调用 Where 方法时(像在 LINQ to Objects 和 LINQ to XML 中那样),参数是委托类型 System..::.Func<(Of <(T, TResult>)>)。使用 Lambda 表达式创建委托最为方便。例如,当您在 System.Linq..::.Queryable 类中调用相同的方法时(像在 LINQ to SQL 中那样),则参数类型是 System.Linq.Expressions..::.Expression<Func>,其中 Func 是包含至多五个输入参数的任何 Func 委托。同样,Lambda 表达式只是一种用于构造表达式目录树的非常简练的方式。尽管事实上通过 Lambda 创建的对象的类型是不同的,但 Lambda 使得 Where 调用看起来类似。
  在前面的示例中,请注意委托签名具有一个 int 类型的隐式类型输入参数,并返回 int。可以将 Lambda 表达式转换为该类型的委托,因为该表达式也具有一个输入参数 (x),以及一个编译器可隐式转换为 int 类型的返回值。(以下几节中将对类型推理进行详细讨论。)使用输入参数 5 调用委托时,它将返回结果 25。
  在 is 或 as 运算符的左侧不允许使用 Lambda。
  适用于匿名方法的所有限制也适用于 Lambda 表达式。有关更多信息,请参见匿名方法(C# 编程指南)。
  下列规则适用于 Lambda 表达式中的变量范围:
  捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。
  在外部方法中看不到 Lambda 表达式内引入的变量。
  Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。
  Lambda 表达式中的返回语句不会导致封闭方法返回。
  Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 goto 语句、break 语句或 continue 语句。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 19:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表