Rust基础——泛型和Trait
泛型 函数泛型 fn foo<T>(arg: &T) -> &T { // ... } // 显式指定泛型参数 foo::<i32>(...); 结构体泛型 struct Point<T> { x: T, y: T } // 显式指定泛型参数 let point: Point<i32>...
泛型 函数泛型 fn foo<T>(arg: &T) -> &T { // ... } // 显式指定泛型参数 foo::<i32>(...); 结构体泛型 struct Point<T> { x: T, y: T } // 显式指定泛型参数 let point: Point<i32>...
开始 本章节介绍rust中的三个常用集合 vector String HashMap 三种集合在内存分配上遵循相同的模式,即在栈上保存一个固定大小的结构体,其中包含一个指向存储元素的堆内存的指针,直接赋值时发生所有权移动 vector Vector表示一个长度可变的数组,是一个类型为Vec<T>的结构体 创建vector 使用new()关联函数创建一...
开始 rust中的错误处理并不像其他语言一样使用异常处理错误,rust将错误分为不可恢复错误和可恢复错误 对于可恢复错误,使用Result<T, E>类型进行处理 对于不可恢复错误,使用panic进行处理 不可恢复错误 使用panic来处理不可恢复的错误,有两种行为会产生panic 代码执行错误,如越界访问 显式调用panic!宏 ...
开始 rust的模块化包含以下概念 包:一个包包含多个crates,每个包都有一个Cargo.toml文件,一个包可以看做一个项目 crates:一个crates是一个编译单元,可以是一个可执行文件或一个库 模块:一个模块表示一个命名空间,一个crates中包含多个模块,可以控制模块的可访问性 路径:访问一个模块或模块成员的方式,使用::作为分隔符 包和crate ...
枚举 使用enum关键字声明一个枚举类型 enum IpAddress { V4, V6 } let ipv4 = IpAddress::V4; let ipv6 = IpAddress::V6; 枚举类型中的每个成员可以封装不同的数据 enum Message { Quit, Move { x: i64, y: i64 }, Write(...
结构体定义 struct是一个自定义数据类型,允许你包装和命名多个相关的值,从而形成一个有意义的组合 使用struct关键字来定义一个结构体 struct User { username: String, email: String, active: bool } 创建结构体的三种方式 直接赋值初始化 初始化简化语法 结构体更新语法 //...
开始 所有权(ownership)是Rust用于如何管理内存的一组规则。所有程序都必须管理其运行时使用计算机内存的方式,通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序 所有权规则 所有权系统遵循三条规则 rust中的每个值都有一个所有者 值在任何时刻仅有一个所有者 当...
开始 Rust是一种系统级编程语言,旨在提供内存安全、并发性和高性能。它通过严格的所有权模型来避免常见的内存错误,如空指针解引用和数据竞争,使得开发者能够编写安全可靠的代码 注释 //:单行注释 /**/:块注释 变量 变量使用let关键字声明,分为可变变量和不可变变量,常量使用const关键字声明 声明变量时,rust支持自动推断变量类型 let a = 10; ...
文件目录结构 Linux使用层次结构 Linux根目录为/,常见的系统目录如下 目录 描述 bin 存放指令的二进制机器码 sbin 系统指令的二进制机器码,使用权限为管理员 lib 存储库文件 ...
开始 导入 导入模块:import module 从模块导入函数:from module import function 全部导入:from module import * 注释 单行注释:# 多行注释:三个单引号或三个双引号包围 格式化输出 占位符:%d,%s age = 18; print("name:%s" % ("Jak...