< 返回版块

cybertheye 发表于 2024-03-03 12:01

Tags:trait,Box

在做Rust By Practice的练习


// 使用至少两种方法来修复错误
fn main() {
    let s: Box<str> = "hello, world".into();
    greetings(s)
}

fn greetings(s: &str) {
    println!("{}",s)
}

解答给出了两个

fn main() {
    let s: Box<str> = "hello, world".into();
    greetings(&s)
 }
 
 fn greetings(s: &str) {
     println!("{}",s)
 }

这个我知道 另一个

fn main() {
    let s: Box<&str> = "hello, world".into();
    greetings(*s)
}

fn greetings(s: &str) {
    println!("{}", s);
}

我有点迷糊,into()方法为啥得到结果类型还可以不一样了? Box<&str>是不是类似C里面的 **x 指针类型?

评论区

写评论
wangbyby 2024-03-03 13:17

其实是调用了不同的into方法。

Bai-Jinlin 2024-03-03 12:31

看into要看对应的from

第一个是https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-From%3C%26str%3E-for-Box%3Cstr%3E

第二个是https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-From%3CT%3E-for-Box%3CT%3E

第一个通过&str创建了个堆上的新Owned str

第二个是将&str这个指针复制到堆上

1 共 2 条评论, 1 页