当前播放: 12 | 语法面面观:函数与闭包(中)
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:Rust语言基础 (32讲)
01 | 课程介绍
免费
02 | 内容综述
免费
学习方法推荐与课程组织逻辑
免费
03 | Rust语言学习观
免费
04 | Rust语言概览
05 | 语法面面观:词法结构
06 | 语法面面观:面向表达式(上)
07 | 语法面面观:面向表达式(中)
08 | 语法面面观:面向表达式(下)
09 | 语法面面观:数据类型 (上)
10 | 语法面面观:数据类型 (下)
11 | 语法面面观:函数与闭包(上)
12 | 语法面面观:函数与闭包(中)
13 | 语法面面观:函数与闭包(下)
14 | 语法面面观:模式匹配
15 | 语法面面观:智能指针(上)
16 | 语法面面观:智能指针(下)
17 | 语法面面观:字符与字符串(上)
18 | 语法面面观:字符与字符串(下)
19 | 语法面面观:集合容器(上)
20 | 语法面面观:集合容器(下)
21 | 语法面面观:迭代器(上)
22 | 语法面面观:迭代器(下)
23 | Rust语法面面观:模块
24 | Rust 语法面面观:Cargo包管理器(上)
25 | Rust 语法面面观:Cargo包管理器(下)
26 | 语法面面观:实际项目的组织结构(上)
27 | 语法面面观:实际项目的组织结构(下)
28 | 语法面面观:定义自己的Crate(上)
29 | 语法面面观:定义自己的Crate(中)
30 | 语法面面观:定义自己的Crate(下)
31 | 作业&第二章预告
第二章:Rust语言核心概念 (56讲)
32 | 本章内容介绍:Rust语言架构
33 | 所有权:内存管理基础知识
34 | 所有权:安全管理之内存安全
35 | 所有权:Copy语义和Copy trait
36 | 所有权:深入理解Copy行为
37 | 所有权:深入理解Move语义
38 | 所有权:Move与析构
39 | 借用检查: 完全理解Scope和NLL
40 | 借用检查: 深入理解生命周期和生命周期参数
41 | 借用检查: 深入理解生命周期参数Early bound
42 | 借用检查:深入理解生命周期参数Tvs&T
43 | 借用检查: 深入理解生命周期参数: trait对象的生命周期参数
44 | 借用检查: 深入理解生命周期参数:高阶生命周期(上)
45 | 借用检查: 深入理解生命周期参数:高阶生命周期(中)
46 | 借用检查: 深入理解生命周期参数:高阶生命周期(下)
47 | 线程与并发:理解线程与并发
48 | 线程与并发:线程间安全共享数据
49 | 线程与并发:构建「无悔」并发系统(一)
50 | 线程与并发:构建「无悔」并发系统(二)
51 | 线程与并发:构建「无悔」并发系统(三)
52 | 线程与并发:构建「无悔」并发系统(四)
53 | 线程与并发:无锁并发(上)
54 | 线程与并发:无锁并发(中)
55 | 线程与并发:无锁并发(下)
56 | trait与泛型:trait静态分发
57 | trait与泛型:认识trait对象
58 | trait与泛型:泛型和trait实现模板方法
59 | trait与泛型:trait对象本质
60 | trait与泛型:对象安全本质
61 | trait与泛型:利用Enum代替trait对象
62 | trait与泛型:trait覆盖实现的一个解决方案
63 | trait与泛型:trait对象与Sized
64 | trait与泛型:trait对象与Box Self
65 | 编程范式:Rust语言编程范式讨论(上)
66 | 编程范式:Rust语言编程范式讨论(下)
67 | Rust错误处理概要
68 | Rust错误处理:Option
69 | Rust错误处理:Result(上)
70 | Rust错误处理:Result(下)
71 | Rust错误处理:try
72 | Rust错误处理:Panic
73 | Rust元编程之反射
74 | Rust元编程之反射的两种应用思路
75 | Rust元编程之编译过程与宏展开概述
76 | Rust元编程之声明宏上
77 | Rust元编程之声明宏下
78 | Rust元编程之过程宏三件套介绍
79 | Rust元编程之过程宏之Bang宏实现原理
80 | Rust元编程之过程宏-使用配置文件动态生成代码
81 | Rust元编程之过程宏Derive宏案例
82 | Rust元编程之过程宏属性宏
83 | 客观理解Unsafe Rust
84 | Unsafe Rust之安全抽象
85 | Unsafe Rust安全抽象之Drop检查
86 | Unsafe Rust安全抽象之型变
87 | UnsafeRust之其他
第三章:Rust异步编程基础 (11讲)
88 | Rust异步编程之IO模型
89 | Rust异步编程之epoll和io_uring
90 | Rust异步编程之事件驱动编程模型
91 | Rust异步编程之epoll代码实践
92 | Rust异步编程之Reactor代码实践
93 | Rust异步编程之MiniMio代码实践
94 | Rust异步编程之Mio代码实践(上)
95 | Rust异步编程之Mio代码实践(下)
97 | Rust异步编程之Future和Futures-rs介绍
96 | Rust异步编程之异步编程模型概要
98 | Rust异步编程之编写异步echo服务(上)
12 | 语法面面观:函数与闭包(中)

12 | 语法面面观:函数与闭包(中)

张汉东
《Rust编程之道》作者
每周四 17:00更新3992
新人首单 ¥59.9 原价 ¥129
8
本节摘要
登录 后留言

精选留言(7)

  • yinz
    mut 是 mutable 的缩写, 表示可变, mutable 的音标是 [ˈmjutəbl],

    我觉得 mut 读作 [ˈmjut] '谬扯' 更加合适 而不是 '骂扯'
    2021-01-13
    2
  • Geek_7c4953
    没搞懂三者的继承关系。FnOnce会消耗捕获变量的所有权,Fn不会,但Fn又是FnOnce。那如果将Fn传递给FnOnce,是不是就消耗捕获变量的所有权呢?但实际上Fn内部并没有任何需要消耗捕获变量所有权的操作啊。
    2021-05-12
  • 编译器会更加源代码推断实现三个trait中的哪几种(FnOnce必须实现),以及如何调用。比如,不获取变量且调用一次的实现且调用FnOnce,不获取变量且调用一次以上的,则实现且调用Fn(这里属于猜测,不知如何查看MIR);需要获取并修改变量的则实现FnMut以及调用FnMut。。。。
    2021-02-23
  • 皓首不倦
    请问下老师,Rust闭包实现原理第二类场景中语法糖去糖那里是不是有点问题,左边的闭包中修改了arr[0]的数值,实际效果是真正的把环境变量中的arr[0]修改了,但是右边去糖之后的代码似乎无法达到修改环境变量的目的,因为let mut c = Clusure {env_var: arr}这个地方,数组默认发生的是copy行为,不是move, 所以call_mut里面实际没有达到修改原环境变量的作用,而是修改了一个原环境变量的copy, 按我理解这个行为倒像是添加了move关键字后的闭包的行为
    2021-02-13
  • 刘福洋
    FnOnce也可以捕获并消费环境外面的一个值吧?正因此所以它对应所有权。而且消费掉环境外的一个值以后就不能进行第二次同样的调用了。所以叫FnOnce
    2020-10-18
    1
  • β
    这节课讲的真不错,拨云见日啊
    2020-10-16
  • 冲天炮
    let c1 = || { "c1"; };
    let c2 = || { "c2"; };
    let v = [c1, c2];
    let v = vec![c1, c2];
    let v = vec![1, 2, 3];
    第3行,编译器可以自动推断出来v的类型;
    第4行,不可以,需要显示指定v的类型:Vec<fn()>,才可以编译通过;
    第5行,同样是使用的vec!,编译器又可以自动推断出来v的类型;
    这是为什么呢?
    2020-10-16
收起评论
看过的人还看
数据结构与算法之美

王争  前Google工程师

81讲 | 110803 人已学习

新人首单 ¥69.9 原价 ¥199
左耳听风

陈皓  网名“左耳朵耗子”,资深技术专家,骨灰级程序员

118讲 | 56933 人已学习

新人首单 ¥99 原价 ¥299
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

49讲 | 76618 人已学习

新人首单 ¥69.9 原价 ¥199
设计模式之美

王争  前Google工程师,《数据结构与算法之美》专栏作者

113讲 | 39089 人已学习

新人首单 ¥99 原价 ¥299