泛型,处理重复的工具。 通过提取函数来消除重复 泛型允许我们用表示多种类型的占位符替换特定类型,以消除代码重复。 泛型 我们使用泛型来为函数签名或结构等项创建定义,然后可以将其用于许多不同的具体数据类型。 在函数定义中 在定义使用泛型的函数时,我们将泛型放在函数的签名中,通常在这里指定参数和返回值的数据类型。 不使用泛型时: 泛型函数定义: fn largest<T>(list: &[T]) -> &T {} 函数最大是对某种类型T的泛型。该函数有一个名为list的形参,它是类型T…
泛型,处理重复的工具。 通过提取函数来消除重复 泛型允许我们用表示多种类型的占位符替换特定类型,以消除代码重复。 泛型 我们使用泛型来为函数签名或结构等项创建定义,然后可以将其用于许多不同的具体数据类型。 在函数定义中 在定义使用泛型的函数时,我们将泛型放在函数的签名中,通常在这里指定参数和返回值的数据类型。 不使用泛型时: 泛型函数定义: fn largest<T>(list: &[T]) -> &T {} 函数最大是对某种类型T的泛型。该函数有一个名为list的形参,它是类型T…
Rust将错误分为两大类:可恢复和不可恢复的错误。对于可恢复的错误,例如找不到文件错误,我们可能只需要向用户报告问题并重试操作。不可恢复的错误总是 bug 的症状,例如试图访问数组末尾之外的位置,所以我们要立即停止程序。 大多数语言不区分这两种错误,并使用类似于异常的机制来处理。但是Rust没有异常,它使用类型Result<T, E>来处理可恢复的错误,使用 panic! 宏来停止程序执行当遇到不可恢复的错误。本章将先讨论调用 panic! ,然后讨论返回Result<T, E>的值。此外,…
Rust 的标准库包含了许多有用的数据结构,称为集合。大多数其他数据类型表示一个特定的值,但集合可以包含多个值。与内置数组和元组类型不同,这些集合指向的数据存储在堆上,这意味着数据量不需要在编译时知道,可以随着程序运行而增长或缩小。 Rust 程序中经常使用的三种集合: 向量允许存储可变数量的值。 字符串是字符的集合。我们之前提到过 String 类型,但在本章中我们将深入讨论。 哈希映射允许将值与特定的键相关联。它是更一般的数据结构映射的特定实现。 文档 Vectors Vec<T> 向量。向量允许您…
Rust 具有许多功能,可供管理代码的组织,包括公开哪些细节,哪些细节是私有的,以及程序中每个范围内的名称。这些功能有时统称为模块系统,包括: Packages: Cargo 的一项功能,可让您构建、测试和共享 crate Crates:生成库或可执行文件的模块树 Modules and use:让您控制路径的组织、范围和隐私 Paths:一种命名项目的方式,例如结构、函数或模块 packages and crates 模块是 Rust 编译器在同一时间考虑的最小代码单元。即使你使用 rustc 而不是 cargo…
枚举是 Rust 中的一种类型,也称为 enums。枚举允许你通过枚举变量的可能变体来定义一个类型。首先,我们将定义并使用枚举来展示枚举如何在数据中编码意义。 Option 是 Rust 中内置的枚举类型。Option<T> 表示一个值可以是 T 类型的值,也可以是什么都没有。它有两个可能的变体:Some(T) 和 None 定义枚举 枚举使你能够表示值是一组可能的值之一。关键字为enum。 直接使用枚举 直接将数据附加到枚举的变体,故不再需要结构体。 我们定义的每个枚举变体的名称也成为一个构造枚举实例…
struct 类似于java中的类。关键字为struct。 这个user1没设置mut, 故实例不可以改。 注意,整个实例必须是可变的;Rust 不允许我们仅将某些字段标记为可变的。如果你在创建结构体的时候使用了 mut,那么整个结构体都是可变的,所有的字段都可以被修改。 根据特定自动返回user 类似自己写了个构造函数。 Using the Field Init Shorthand 将函数参数命名为与结构字段同名是有意义的,但必须重复字段名称email和username变量有点乏味。因为参数名和结构字段名在清单,…
所有权是Rust最独特的特征。使rust能在不需要垃圾收集器的情况下,保证内存安全。所有权的相关特征:借用、切片以及rust如何在内存中布局数据。 什么是所有权? 所有权是rust管理内存的一组规则。所有语言都必须在运行时管理计算机内存。java中使用的是垃圾回收机制,c++使用显式分配和释放内存,而rust是通过所有权定义一组规则,若违法任何规则,则程序无法变异。所有权的任何功能都不会在程序运行时减慢程序的速度。 堆栈:先进后出,分配更快,因为始终在堆栈的顶部分配。 堆:访问速度比堆栈慢,因为需根据指针。 所有权…
Variables and Mutability 默认情况下,变量是不可变的。在没有使用mut的情况下,若重复修改变量的值会产生error[E0384]: cannot assign twice to immutable variable x。 Constants 同不可能变量相同,常量的值也不可修改。但是常量不允许使用mut,常量不仅在默认情况下是不可变的--它们始终是不可变的的。定义常量使用const关键字,而且必须在初始化时赋值,值只能是一个常量表达式。 const THREE_HOURS_IN_SECOND…
输入数字代码 use std::io; 引入io标准库。 let mut guess = String::new(); let 用于创建变量,但是rust默认情况下,变量的值是不可改变的。为了使值可以变化,需在变量名前添加mut; let mut guess = String::new(); 行创建了一个可变变量,该变量当前绑定到一个新的空实例String io::stdin() .read_line(&mut guess) 使用此io函数,来允许用户进行输入。若没在开头导入use std::i…
rust语言 rustup docs --book 打开本地文档rustc --version 查看rust版本rustup update 更新rustrustup self uninstall 卸载rust和 rustupcargo --version 查看cargo版本 安装时需要 c++ build tools, cargo会与rust一同安装。 rust风格 1. Rust风格默认为四个空格缩进,而不是制表符。1. println!调用Rust宏。若调用一个函数应输入println(不带!)。1. …