Rust使用学习记录

 

声明Module

如果在main.rs/lib.rs中使用mod,比如mod toys,则crate会在以下位置寻找对应的模块文件:

  1. main.rs的同级目录内寻找toys.rs。
  2. src/toys/mod.rs,这表示toys模块的声明

如果不在上述位置使用模块,则在使用模块的文件的同级目录进行查找。


Trait作为成员对象

声明trait,参数添加&self表示调用者自身,这是为了保证trait类型安全(这样可以使trait作为一个“对象”来使用),例如这样:

pub trait TState {
    fn on_enter(&self);
    fn on_update(&self);
    fn on_leave(&self);
}

要使得一个trait成为结构体中的成员,这个trait必须是“类型安全”的。

pub struct ProcedureComponent{
    //必须使用Box指针来指向一个trait对象,因为trait是一个未知大小的类型,而Box指针是一个固定大小的类型
    //并且使用dyn关键字来声明trait对象,这表示这是一个运行时动态分发的trait对象
    //TState是一个trait对象
    _current_procedure:Box<dyn TState>,
}

Some,Result,和Option

Option:表示一个可选值。它可以是 Some(T)(有值)或 None(无值)。

Result<T, E>:表示一个可能成功(Ok(T))或失败(Err(E))的操作。


Rust中返回可变引用

pub struct EventComponent {
    _event_map:HashMap<i32,Vec<fn()>>
}

let mut call_back_vec = self._event_map.get(&event_id).unwrap() //error
let call_back_vec = self._event_map.get_mut(&event_id).unwrap() //ok

会报错的原因是 get 方法返回的是一个不可变引用(&Vec<fn()>),而你试图将其绑定到一个可变变量 mut,这会导致编译错误。 而 不会报错的原因是 get_mut 方法返回的是一个可变引用(&mut Vec<fn()>),这允许你对返回的引用进行修改。 get 返回不可变引用,不能绑定到 mut 变量。 get_mut 返回可变引用,可以绑定到 mut 变量并进行修改。


实例函数的所有权问题

在 Rust 中,self 和 &self 作为方法的参数有以下区别: self:

  • 表示方法获取所有权。
  • 调用该方法时,所有权会被转移到方法内部,调用者将不再拥有该实例。
  • 适用于需要消耗实例的场景。

&self:

  • 表示方法获取不可变引用。
  • 调用该方法时,调用者仍然保留对实例的所有权。
  • 适用于只需要读取实例数据而不修改的场景。
struct MyStruct {
    value: i32,
}
impl MyStruct {
    // 获取所有权
    fn consume(self) {
        println!("Consuming MyStruct with value: {}", self.value);
    }
    // 获取不可变引用
    fn read(&self) {
        println!("Reading MyStruct with value: {}", self.value);
    }
}

fn main() {
    let my_struct = MyStruct { value: 10 };
    // 调用不可变引用方法
    my_struct.read();
    // 调用获取所有权方法
    my_struct.consume();
    // 此时 my_struct 已被消耗,不能再使用
}

调试和工具链

Windows 上安装 Rust 需要有 C++ 环境,以下为安装的两种方式:

1. x86_64-pc-windows-msvc(官方推荐)

2、x86_64-pc-windows-gnu

调试时可以选择启用MSVC工具链或GNU工具链

【rustup toolchain list】查看当前的工具链

【rustup default stable-gnu】将默认启用的工具链切换为GNU

没有安装GNU工具链的话需要先安装,注意,如果启用GNU工具链,则需要安装GCC编译器

安装和使用GNU工具链:

【rustup toolchain install stable-x86_64-pc-windows-gnu】

【rustup default stable-x86_64-pc-windows-gnu】

安装和使用MSVC工具链:

【rustup toolchain install stable-x86_64-pc-windows-msvc】 【rustup default stable-x86_64-pc-windows-msvc】