初学rust——Iterators、Closures、Crates.io and Pointers

学习rust的第五、六天,学习资料是官网的《The Rust Programming Language》,本笔记的内容包括第13-15章的内容

Chapter 13 Functional Language Features: Iterators and Closure

本章主要内容:

  • Closure,function-like的结构,可以存储在变量中
  • Iterators,处理一系列元素的方法
  • 如何利用以上两种特性来增强上一章的代码
  • 以上两种特性的性能分析

13.1 Closures: Anonymous Functions that Can Capture Their Environment

目标:代码在程序中仅定义一次,同时仅在需要时调用一次
closure的声明使用let语句,声明表示这个closure包含一个匿名函数的定义,不代表其包含一个匿名函数的运行结果。
closure不要求声明参数的类型,或返回值的类型,这一点与函数是不同的。由于函数作为显式的用户接口,必须声明其参数与返回值的类型,作为所有使用这个函数的成员的“共识”。但是闭包不同,闭包不作为暴露的接口,仅为一个匿名函数,存储在变量中,因而不需要做类型声明。

closure的类型是编译器推测的,但是仅能用作一种类型。

所有的闭包至少实现以下之一的trait:
Fn, FnMut, FnOnce

闭包具有的函数所没有的性质:capture their environment and access variables from the scope in which they’re defined.

fn main() {
   
    let x = 4;

    let equal_to_x = |z| z == x;  //注意此处,我们并没有把x作为参数传递给闭包,但是它依然可以访问x的值,因为他们定一下相同的scope下

    let y = 4;

    assert!(equal_to_x(y));
}

closure从环境中抓取值的方式有三种,这三种方式分别对应着函数获得变量的三种方法:taking ownership、borrowing mutably和borrowing immutably。他们被编码进了三种Fn trait:

  1. FnOnce 从其scope中获取变量,并得到变量的ownership,将其move到closure中。Once表示闭包无法超过一次获得同个变量的ownership
  2. FnMutmutably borrow,从而可以改变环境
  3. Fnimmutably borrow

13.2 Processing a Series of Items with Iterators

所有的Iterator都具有trait:Iterator,在标准库中定义:

pub trait Iterator {
   
    type Item;

    fn next(&mut self) -> Option<Self::Item>;
// methods with default implementations elided
}

定义一个iterator的关键在于实现next函数
注意rust中的iterator是“lazy”的,什么也不做,除非被调用。

13.3 Improving Our I/O Project

本节内容见代码Chapter12

13.4 Comparing Performance: Loops vs. Iterators

本节内容仅给出结论:Iterator的速度很快,比loop的效率高,可以放心大胆地使用~
zero-cost abstraction

Chapter 14, More About Cargo and Crates.io

本章的内容可以帮助程序媛做到:

  • Customize your build through released profile
  • 在crates.io发布libraries
  • 使用workshop组织大规模的项目
  • 从crates.io安装binaries
  • 使用custom commands扩展Cargo

14.1 Customizing Builds

Cargo具有两个主要文件:dev:在运行cargo run时使用;release:在运行cargo build --release。

当Cargo.toml文件中没有指定[profile.*]时,cargo对每个文件都有默认的设置。通过加入[profile.*]可以重写默认值:

[profile.dev]  
opt-level = 0 //规定了rust对代码进行优化的次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值