Rust语法

Rust语法

常错语法(老是忘掉)

if let

fn main() {
    let config_max = Some(3u8);
    match config_max {
        Some(max) => println!("The maximum is configured to be {}", max),
        _ => (),
    }
}

可写为 if let

fn main() {
    let config_max = Some(3u8);
    if let Some(max) = config_max {
        println!("The maximum is configured to be {}", max);
    }
}

Copy和Clone Trait

碰到这个问题是在像Vec以及Map类似的数据结构中插入值时,会涉及到变量的所有权变化。

如果被插入的类型实现了Copy Trait则会被直接复制,如果没有实现,则所有权会发生转移。

在 Rust 中,CopyClone 都是 trait,用于指定类型的复制行为。它们的主要区别在于它们的语义和使用场景。

Copy trait 表示一个类型可以通过简单的位拷贝来复制,而不需要执行任何额外的操作。当一个类型实现了 Copy trait 时,它的值可以被自由地复制和传递,而不会影响原始值。例如,基本数据类型(如整数和浮点数)以及一些简单的结构体类型(如只包含基本数据类型的结构体)都实现了 Copy trait。

Clone trait 表示一个类型可以通过深度复制来创建一个新的值,而不是简单的位拷贝。当一个类型实现了 Clone trait 时,它的值可以通过调用 clone 方法来复制。这个方法会创建一个新的值,并将原始值的所有字段复制到新的值中。例如,字符串和向量类型都实现了 Clone trait。

需要注意的是,实现 Copy trait 的类型必须同时实现 Clone trait,因为 Copy trait 的实现是基于 Clone trait 的。如果一个类型实现了 Copy trait,那么它也必须是 Clone trait 的实现者。

总之,Copy trait 适用于简单的值类型,而 Clone trait 适用于需要深度复制的类型。

此外并不是全部的类型都能够实现Copy Trait,对于自定义类型,只有所有成员都实现了Copy Trait之后,这个类型才有资格实现Copy Trait

最后更新于

这有帮助吗?