理解Lambda表达式和闭包

了解由函数指针到Lambda表达式的演化过程

Lambda表达式的这种简洁的语法并不是什么古老的秘法,因为它并不难以理解(难以理解的代码只有一个目的,那就是吓唬程序员)

 1 #include "stdafx.h"
 2 using namespace System;
 3
 4 typedef void(*FunctionPointer)(System::String ^str);
 5
 6 void HelloWorld(System::String ^str)
 7 {
 8     Console::WriteLine(str);
 9     Console::ReadLine();
10 }
11
12 int main(array<System::String ^> ^args)
13 {
14     FunctionPointer fp = HelloWorld;
15     fp("Hello World");
16     return 0;
17 }

函数指针

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace CharpFunctionPointer {
 6     class Program {
 7
 8         delegate void FunctionPointer(string str);
 9
10         static void Main(string[] args) {
11             FunctionPointer fp = HelloWorld;
12             fp("Hello World!");
13         }
14
15         static void HelloWorld(string str) {
16             Console.WriteLine(str);
17             Console.ReadLine();
18         }
19     }
20
21 }

委托

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace CharpFunctionPointer {
 6     class Program {
 7
 8         delegate void FunctionPointer(string str);
 9
10         static void Main(string[] args) {
11             FunctionPointer fp = delegate (string s) {
12                 Console.WriteLine(s);
13                 Console.ReadLine();
14             };
15             fp("Hello World!");
16         }
17     }
18
19 }

匿名委托

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace CharpFunctionPointer {
 6     class Program {
 7
 8         delegate void FunctionPointer(string str);
 9
10         static void Main(string[] args) {
11             FunctionPointer fp =
12                 s => Console.WriteLine(s);
13
14             fp("Hello World!");
15             Console.ReadLine();
16         }
17     }
18 }

Lambda表达式

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace CharpFunctionPointer {
 6     class Program {
 7
 8         static void Main(string[] args) {
 9             Action<string> fp = s => Console.WriteLine(s);
10
11             fp("Hello World!");
12             Console.ReadLine();
13         }
14     }
15 }

将Lambda表达式赋值给一个预定义的泛型委托

时间: 2024-10-13 03:07:18

理解Lambda表达式和闭包的相关文章

python3 入门 (三) 函数与lambda表达式、闭包

函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明 函数内容以冒号起始,并且缩进 Return[expression]结束函数,选择性地返回一个值给调用方.不带表达式的return相当于返回 None 函数的定义: 1 def test0(): 2 "函数_文档字符串" 3 pri

理解Lambda表达式

1.什么是Lambda表达式 Lambda表达式是一个匿名方法,通常在LINQ中被用来创建委托 简单来说.它是一个没有声明,没有访问修饰符,没有返回值.甚至没有名字的方法. 2.为什么我们需要使用Lambda表达式?或者说为什么我们要写一个没有名字的函数? 为了方便,这种快捷方式允许你在调用的地方直接编写代码,尤其是你想调用的代码只会在这个地方使用一次.并且方法体本身很短.节省了单独写方法中写声明等等的麻烦.. 好处 1.代码量减少.不必写方法的名称.返回值和访问修饰符 2.当阅读代码的时候.直

深入理解 lambda表达式 与 Optional Null 源码解析(Java11 三)

import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.*; import java.util.function.Function; import java.util

LINQ to Objects系列(3)深入理解Lambda表达式

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

【Python笔记】Python的几个高级语法概念浅析:lambda表达式 &amp;&amp; 闭包 &amp;&amp; 装饰器

本文主要记录自己对几个高级语法概念的理解:匿名函数.lambda表达式.闭包.装饰器. 这几个概念并非Python特有,但本文只限于用Python做说明. 1. 匿名函数 匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合: 1) 作为参数传给高阶函数(higher-order function ),如python中的built-in函数filter/map/reduce都是典型的

java8之lambda表达式(变量作用域)

通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 {     public static void main(String[] args) {         repeatMessage("Hello", 20);     }     public static void repeatMessage(String text,int count){         Runnable r = 

java8之lambda表达式入门

1.基本介绍 lambda表达式,即带有参数的表达式,为了更清晰地理解lambda表达式,先上代码: 1.1 两种方式的对比 1.1.1 方式1-匿名内部类 class Student{ private String name; private Double score; public Student(String name, Double score) { this.name = name; this.score = score; } public String getName() { ret

Java核心技术之Java8新特性-Lambda表达式

1 总体说明 Java8新特性概述 函数式接口 Lambda表达式(闭包) 2 Java8新特性概述 Oracle公司于2014年3月发布了Java8正式版,该版本是自JDK5.0以来最具革命性的版本. Java8为Java语言.编译器.类库和JVM带来了大量的新特性.接下来的内容将会详细说明Java8在Java语言方面的新特性以及它们的使用场景. 3 函数式接口 Java8引入的一个核心概念是函数式接口(Functional Interfaces):如果一个接口定义一个唯一的抽象方法,那么这个

Java8的Lambda表达式简介

先阐述一下JSR(Java Specification Requests)规范,即Java语言的规范提案.是向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都可以提交JSR,可以向Java平台增添新的API和服务.JSR已成为Java界的一个重要标准.可以理解为JSR是Java开发者以及授权者指定的标准,而Java开发者以及授权者形成一个JCP国际组织.职能是制定Java标准,即所有的规范都是有迹可循的. 在Java8中推出的lambda表达式