首页 > 其他分享 >Lambda表达式

Lambda表达式

时间:2024-08-02 15:55:51浏览次数:9  
标签:函数 列表 参数 类型 表达式 Lambda

Lambda有很多叫法:Lambda表达式、Lambda函数、匿名函数。Lambda是一种定义匿名函数对象的简洁方式,可以接受参数、存储状态、返回值以及跨越多行。

语法定义:

【捕获列表】【参数列表】【可变规则】 【返回类型】【函数体】

[capture list] [parameters] [mutable throw()] -> return-type { statement}

【异常说明】

(参数列表) => {

//函数体

};

捕获列表:规范称之为Lambda导入器,捕获列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。捕获列表能捕获上下文中的变量供Lambda函数使用。

参数列表:与普通函数的参数列表一致。如不需要传递则可连同括号一起省略。

可变规则:mutable修饰符,默认情况下Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略。(参数不能为空)。

异常说明:用于Lamdba表达式内部函数抛出异常。

返回类型: 追踪返回类型形式声明函数的返回类型。可在不需要返回值的时候连同 ->一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。

Lambda函数体: 内容与普通函数一样,不过除了可以使用函数之外,还可以使用所有捕获的变量。

Lambda表达式有几种不同的形式。例如:语句Lambda由形参列表、Lambda操作符=>和代码块组成;表达式Lambda比语句Lambda更进一步,它只包含要返回的表达式,完全没有语句块。

Lambda表达式的注意事项和例子

Lambda表达式本身没有类型,所以,没有能直接从式中访问的成员,连object也没有string s = ((int x) => x).ToString();
由于Lambda表达式没有类型,所以不能出现在is操作符的左侧bool b = ((int x) => x) is Fun<int,int>
Lambda表达式只能转换成兼容委托类型。Func<int,bool> f = (int x) => x;
Lambda表达式没有类型,所以不能用于推断局部变量的类型var v = x => x;
C#不允许在Lambda表达式内部使用跳转语句(break,goto,continue)跳转到Lambda表达式外部;反之亦然。string[] args; Func<string> f; switch(args[0]) { case "/File": f = () => { if(!File.Exists(args[1]) break; return args[1])};}
对于一个Lambda表达式引入的参数和局部变量,其作用域仅限于Lambda主体Func<int,int,bool> expression = (first,second) => first > second; first++;
编译器的确定性赋值分析机制在Lambda表达式内部检测不到外部局部变量进行初始化的情况

闭包

闭包是一种语言特性,它允许在函数内部定义的函数访问外部的局部变量。即使外层函数执行已终止。在C#中我们可以使用Lambda来实现闭包。

委托

为增强灵活性和减少重复代码,可将方法作为参数传递给另一个方法,而方法要作为参数进行传递就需要一个能表示方法的数据类型,这个数据类型就叫委托。常规的委托类型有:Func<> 、Action<>

标签:函数,列表,参数,类型,表达式,Lambda
From: https://blog.csdn.net/javajjij/article/details/140872752

相关文章

  • 中缀表达式
    中缀表达式一、基本概念1、中缀表达式:操作符以中缀形式位于运算数中间(如:3+2),是我们日常通用的算术和逻辑公式表示方法。2、后缀表达式:又称逆波兰式,操作符以后缀形式位于两个运算数后(如:3+2的后缀表达形式就是32+)。3、前缀表达式:又称波兰式,操作符以前缀形式位于两个运算数前(如:3+2的......
  • 中缀表达式
    中缀表达式一、基本概念1、中缀表达式:操作符以中缀形式位于运算数中间(如:3+2),是我们日常通用的算术和逻辑公式表示方法。2、后缀表达式:又称逆波兰式,操作符以后缀形式位于两个运算数后(如:3+2的后缀表达形式就是32+)。3、前缀表达式:又称波兰式,操作符以前缀形式位于两个运算数前(如:3+2的......
  • 中缀表达式
    一、基本概念1、中缀表达式:操作符以中缀形式位于运算数中间(如:3+2),是我们日常通用的算术和逻辑公式表示方法。2、后缀表达式:又称逆波兰式,操作符以后缀形式位于两个运算数后(如:3+2的后缀表达形式就是32+)。3、前缀表达式:又称波兰式,操作符以前缀形式位于两个运算数前(如:3+2的前缀表达形......
  • 中缀表达式
    中缀表达式一、基本概念1、中缀表达式:操作符以中缀形式位于运算数中间(如:3+2),是我们日常通用的算术和逻辑公式表示方法。2、后缀表达式:又称逆波兰式,操作符以后缀形式位于两个运算数后(如:3+2的后缀表达形式就是32+)。3、前缀表达式:又称波兰式,操作符以前缀形式位于两个运算数前(如:3+2的......
  • PHP8中match表达式的强劲功能
    hp8中match表达式的强劲功能,让你写代码更加灵活PHP8是PHP语言的最新版本,带来了很多新功能和优化,其中一个最令人振奋的功能是新的match表达式。这个表达式与switch语句类似,但比switch语句更加强大和灵活,使开发人员写代码更加方便,而且代码清晰易读。在本文中,我们将深入研究match表......
  • AcWing3302. 表达式求值
    代码解释while(j<str.size()&&isdigit(str[j])){x=x*10+str[j++]-'0';}把字符串中里面连续的数字转化为int类型变量,比如输入996/332+8,正常的挨个字符扫描只能扫到’9’,‘9’,‘6’,但是按照上面代码的算法是重新开了一个循......
  • 正则表达式:有没有一种方法可以提取单引号之间的所有子字符串,而不提取撇号之间的子字符
    基本上,我有一个包含英语语句的数据集。有些语句包含前导/尾随标点符号,所以我想清理和标准化它们。标准化的标准是删除所有前导/尾随标点符号,语句的第一个字符大写,并且语句以句点结尾。我有一个函数可以执行此操作并将其应用于数据集中的每一行。如果有帮助的话,这里是一个代码......
  • 数仓入门:数据分析模型、数仓建模、离线实时数仓、Lambda、Kappa、湖仓一体
    往期推荐大数据HBase图文简介-CSDN博客数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS-CSDN博客数仓常见名词解析和名词之间的关系-CSDN博客目录0.前言0.1浅谈维度建模0.2数据分析模型1.何为数据仓库1.1 为什么不直接用业务平台的数据而要建设数仓?1.2 数据仓库特......
  • 我可以运行创建两个表达式和两列,其中第二列引用同一行中的第一列吗?
    我有一个来自FREDAPI的数据库:self.yielddiff_lfshape:(9,5)┌────────────┬────────────────────────────┬──────────┬──────────┬─────────────┐│statistic┆Date......
  • leetcode20.有效的括号、华为OD机试-(C卷,100分)- 表达式括号匹配
    leetcode20.有效的括号题目描述给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:s=“()......