gpt4 book ai didi

rust - 为什么这个 Rust 函数不起作用?

转载 作者:行者123 更新时间:2023-11-29 08:27:37 25 4
gpt4 key购买 nike

<分区>

我试图了解如何在 Rust 中做一些简单的事情,但我一直在与借用检查器作斗争,我不确定为什么。我编写了一个简单的函数,您向它传递一个文件名,它会为您提供主目录中该文件的路径。

程序如下:

use std::env;

fn filename_in_homedir(filename: &str) -> Option<&str> {
let mut homedir = match env::home_dir() {
None => return None,
Some(p) => p
};
homedir.push(filename);
homedir.to_str()
}

fn main() {
match filename_in_homedir(".ssh/id_rsa.pub") {
Some(s) => println!("{}", s),
None => println!("Oops can't get it")
};
}

当我尝试构建它时出现此错误:

$ cargo build
Compiling homedir-test v0.1.0 (file:///home/user/code/homedir-test)
src/main.rs:9:5: 9:12 error: `homedir` does not live long enough
src/main.rs:9 homedir.to_str()
^~~~~~~
src/main.rs:3:56: 10:2 note: reference must be valid for the anonymous lifetime #1 defined on the block at 3:55...
src/main.rs:3 fn filename_in_homedir(filename: &str) -> Option<&str> {
src/main.rs:4 let mut homedir = match env::home_dir() {
src/main.rs:5 None => return None,
src/main.rs:6 Some(p) => p
src/main.rs:7 };
src/main.rs:8 homedir.push(filename);
...
src/main.rs:7:7: 10:2 note: ...but borrowed value is only valid for the block suffix following statement 0 at 7:6
src/main.rs: 7 };
src/main.rs: 8 homedir.push(filename);
src/main.rs: 9 homedir.to_str()
src/main.rs:10 }
error: aborting due to previous error
Could not compile `homedir-test`.

我不明白为什么不起作用。如果env::home_dir()失败,函数返回 None .如果成功,则可变变量 homedir 将获得其值(即 std::path::PathBuf )。此时,homedir变量应该属于 filename_in_homedir范围。下一行修改 homedir将文件名添加到末尾,这很好用。最后一行,调用 .to_str() , returns一个Option<&str>本身。

因为我最终要返回一个 &str那指向里面的某个地方 homedir ,也许当 filename_in_homedir范围结束和homedir被删除,即&str也是,这就是它抛出此错误的原因?

如何修改此功能以使其正常工作,我做错了什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com