4

用整数类型解释Rust所有权概念

 1 year ago
source link: https://www.jdon.com/62796
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用整数类型解释Rust所有权概念
对于实现了Copy特性的类型,如i32,使用起来就容易多了。
(String默认是值传递,不是引用传递,也不是值复制,但是i32类型是值复制)

让我们从简单的东西开始:
我们创建age并调用do_something。这里,age的值被复制了,因为i32类型实现了复制特性。

fn main() {
    let age: i32 = 25;
    do_something(age);
}

fn do_something(age: i32) {
    println!("Hello, {}!", age);
}

在第4行中再次复制了年龄的值。

fn main() {
    let age: i32 = 25;
    do_something(age);
    println!("{}", age);
}

fn do_something(age: i32) {
    println!("Hello, {}!", age);
}

我们也可以通过引用来传递数值,尽管我认为这不是最佳实践。

fn main() {
    let age: i32 = 25;
    do_something(&age);
    println!("{}", age);
}

fn do_something(age: &i32) {
    println!("Hello, {}!", age);
}

也可以使用克隆(原型模式
在第 3 行中,我们首先进行了克隆age,然后将其传递给do_something. 程序会编译,但请注意复制将进行两次:一次在.clone() 中,另一个是当age进入do_something作用域时的复制。
请注意,应避免使用此坏味道用法。请参阅此处的clone_on_copy 上的 Clippy lint 。

fn main() {
    let age: i32 = 25;
    do_something(age.clone());
    println!("{}", age);
}

fn do_something(age: i32) {
    println!("Hello, {}!", age);
}

 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK