我正在try 将一个PathBuf转换成一个字符串,这样就可以将它插入到CLI程序中调试文件未找到错误的死机!()消息中(根据Rust Book的第12章).

StackOverflow上的当前解决方案在使用env::current_dir().unwrap().to_string_lossy()时返回Cow<str>,或者在使用env::current_dir().unwrap().into_os_string().to_str()时返回Option<&str>.

这些类型不能提供给Panic!()宏,并且会引发编译器错误.

以下是当前代码:

    let args: Vec<String> = env::args().collect();

    let cwd = env::current_dir().unwrap().into_os_string().to_str();
    
    if args.len() < 3 {
        panic!("Not enough arguments, give a query argument and a file path. Current working directory is {cwd}");
    }

目前,我try 使用一个Option<&str>的"if let"语句来提取"str",但borrow 判断器阻止我使用它:

let pwd: String;
if let Some(str) = cwd {
    let pwd = str.into_string();
}
println!("{pwd}");

推荐答案

以面向用户的方式打印路径的惯用方法是使用Path::display:

let args: Vec<String> = env::args().collect();
let cwd = env::current_dir().unwrap();

if args.len() < 3 {
    let cwd = cwd.display();
    panic!("Not enough arguments, give a query argument and a file path. Current working directory is {cwd}");
}

playground

Rust相关问答推荐

使用nom将任何空白、制表符、白线等序列替换为单个空白

如何使用字符串迭代器执行查找?

无法从流中读取Redis请求

将serde_json读入`VEC<;T&>;`( rust 色)时出现问题

我们能确定Rust会优化掉Clone()吗?如果它会立即掉落?

正在将带有盒的异步特征迁移到新的异步_fn_in_特征功能

当我try 使用 SKI 演算中的S I I实现递归时,为什么 Rust 会失败?

为什么编译器看不到这个 `From` impl?

使用占位符获取用户输入

Rust 中多个 & 符号的内存表示

try 从标准输入获取用户名和密码并删除 \r\n

Rust 并行获取对 ndarray 的每个元素的可变引用

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

如何从 x86_64 Mac 构建 M1 Mac?

在 Rust 中,Weak 如何知道内部值何时被删除?

LinkedList::drain_filter::drop 中 DropGuard 的作用是什么?

改变不实现克隆的 dioxus UseState struct

如何异步记忆选项中的 struct 字段

TinyVec 如何与 Vec 大小相同?