`
jobar
  • 浏览: 347421 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lambda表达式基础(7)- 什么是Lambda表达式的作用域规则?

 
阅读更多
什么是Lambda表达式的作用域规则?
Lambda表达式不引入任何新命名环境。在Lambda的body中的变量名就在一个闭包环境中被解释执行,除非在Lambda表达式的形式参数中引入新命名。紧接lambda表达式外的关键字this和super也具有相同的含义- 也就是说,它们引用的是闭包类。形式参数作为方法参数遵循相同的规则用于覆盖类和实例变量。例如,Bar的声明:
   
class Bar { int i; Foo foo = i -> i * 2; };

是合法的,因为在lambda参数i隐藏了的实例变量。对于局部变量,另一方面,遮蔽是不可能的,所以变量没有重新声明和分配的一般规则在使用前应用,使得方法声明
void bar() { int i; Foo foo = i -> i * 2; };//非法:变量i已经定义

非法

原文链接:http://www.lambdafaq.org/what-are-the-scoping-rules-for-lambda-expressions/
分享到:
评论

相关推荐

    Java 8 lambda表达式

    Lambda表达式可以访问其所在作用域中的局部变量,但只有当这些变量是final或实际上final时,才能在lambda体内使用。 总之,Java 8的Lambda表达式极大地提升了代码的简洁性和可读性,特别是对于那些需要频繁使用回...

    C#lambda表达式的使用

    Lambda 式中的变量作用域 在 Lambda 表达式定义中可以引用外部变量。只要是在定义处能够访问到的变量,都可以在 Lambda 表达式中引用。Lambda 表达式的定义仅仅是定义一个匿名方法,最终会生成一个委托对象。外部...

    C++ 11 lambda 表达式

    C++ 11引入了lambda表达式,这是一个强大的特性,极大地增强了C++的函数式编程能力。Lambda表达式允许在程序中直接定义匿名函数,并且可以直接在需要的地方使用,无需预先声明。这对于处理回调函数、简化算法实现...

    C++ 中的 Lambda 表达式

    这个子句用来指定Lambda表达式可以访问哪些外围作用域中的变量。例如,下面的Lambda表达式捕获了一个名为`x`的外部变量,并通过值的方式捕获它: ```cpp auto lambda = [x]() { /* body */ }; ``` 捕获子句还...

    lambda表达式学习demo

    - Lambda 表达式可以访问外部作用域的变量,但不能修改它们(除非它们是 `final` 或 `effectively final` 的)。 7. **并行流与Lambda** - `Stream API` 支持并行流,通过 `parallelStream()` 创建。Lambda 可以...

    C# Lambda表达式示例

    Lambda表达式是C#编程语言中的一个重要特性,它在处理函数式编程和LINQ查询时尤其有用。Lambda表达式提供了一种简洁的方式来定义匿名函数,使得代码更加紧凑和易读。下面我们将深入探讨C# Lambda表达式的概念、语法...

    C++ Lambda表达式详解

    Lambda表达式的捕获列表可以捕获当前函数作用域的零个或多个变量,变量之间用逗号分隔;这些变量可以在Lambda表达式中被访问和修改。捕获方式有三种,分别是值捕获、引用捕获和混合捕获。 值捕获:将外部变量以...

    C++ 之 Lambda 表达式

    2. Lambda表达式可访问作用域内的任何变量,代码简洁。 使用Lambda表达式可以使代码更加简洁、清晰、可读性更强。如果需要修改代码,涉及的内容就在附近。Lambda表达式可以与STL的一些算法结合使用,例如std::...

    Lambda表达式终.zip

    - **局部变量的访问**:Lambda表达式可以访问其所在作用域的final或实际上final的局部变量。 - **并行流**:使用`parallelStream()`,Lambda表达式可以并行执行,提高性能。 Lambda表达式是Java 8及更高版本的重要...

    Lambda表达式超详细总结

    Lambda表达式的变量作用域仅限于其自身,不能访问局部变量,除非它们是final或effectively final的。 10. **使用Lambda表达式进行集合操作** Lambda表达式常用于集合操作,如`filter()`, `map()`, `reduce()`, `...

    lambda 表达式

    1. **闭包**:能够捕获外部作用域的变量,形成闭包。 ```cpp auto add = [x = 5](int y) { return x + y; }; ``` 2. **类型推导**:使用`auto`关键字可以自动推导出lambda表达式的类型。 ```cpp auto lambda...

    1. lambda 表达式1

    - **捕获列表(Capture List)**:这部分用于指定如何处理外部作用域中的变量。它可以是`[]`(不捕获任何变量)、`[=]`(按值捕获所有变量)、`[&]`(按引用捕获所有变量)或者混合捕获,如`[=, &var1, &var2]`。 -...

    Lambda表达式

    当Lambda表达式引用了一个局部变量时,即使该变量在Lambda表达式执行时已经超出作用域,它仍然可以访问。但是要注意,这种访问方式创建的是副本,而非对原始变量的引用,因此对于可变类型(如引用类型)会有不同的...

    day05_内部类和Lambda表达式.zip

    2. 局部内部类:定义在方法或作用域内,只能在这个方法或作用域中使用,生命周期与其所在的代码块相同。 3. 静态内部类:与成员内部类类似,但可以像普通静态成员一样被实例化,无需外部类的实例。 4. 匿名内部类:...

    lambda表达式详解

    - **变量捕获**:Lambda表达式可以访问和修改外部作用域的final或effectively final变量。对于非final变量,虽然不能直接修改,但可以通过闭包间接实现。 - **方法引用**:当Lambda体可以直接映射到某个已存在的...

    Lambda表达式与LINQ.rar

    - `capture-list`:捕获列表,用于捕获外部作用域的变量,可以是值捕获或引用捕获。 - `(parameters)`:函数参数列表,可以为空。 - `return-type`:返回类型,可以省略,编译器会自动推断。 - `{ function-body }`...

    java 1.8新特性 lambda表达式.docx

    - **变量作用域**:Lambda 表达式只能引用标记为 final 的外层局部变量。这意味着不能在 Lambda 内部修改定义在域外的局部变量,否则会导致编译错误。 - **隐性 final 语义**:即使局部变量未明确标记为 final,也不...

    Java8之lambda表达式基本语法

    3. lambda表达式可以捕捉外部变量,但是需要注意变量的作用域和生命周期。 在Java8中,lambda表达式可以应用于很多场景,例如: 1. 集合框架中,使用lambda表达式来实现排序、过滤和映射等操作。 2. 函数式编程中...

Global site tag (gtag.js) - Google Analytics