gpt4 book ai didi

rust - 为什么我不能将字符串从 env::Args 传递到 Path::new?

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

考虑以下示例:

use std::env;
use std::path::Path;

fn main() {
let args: Vec<_> = env::args().collect();
let out_path: String = args[2];
let _path = Path::new(out_path);
}

这是我在编译时遇到的错误:

error[E0308]: mismatched types
--> main.rs:8:27
|
8 | let _path = Path::new(out_path);
| ^^^^^^^^
| |
| expected reference, found struct `std::string::String`
| help: consider borrowing here: `&out_path`
|
= note: expected type `&_`
found type `std::string::String`

现在,如果我遵循编译器的建议,我会得到:

error[E0507]: cannot move out of indexed content
--> main.rs:7:28
|
7 | let out_path: String = args[2];
| ^^^^^^^
| |
| cannot move out of indexed content
| help: consider using a reference instead: `&args[2]`

error: aborting due to previous error

在应用建议后,导致我出现之前的错误:

error[E0308]: mismatched types
--> main.rs:7:28
|
7 | let out_path: String = &args[2];
| ^^^^^^^^
| |
| expected struct `std::string::String`, found reference
| help: consider removing the borrow: `args[2]`
|
= note: expected type `std::string::String`
found type `&std::string::String`

如何了解情况并解决问题?

最佳答案

这确实是一个不幸的建议序列(使用引用 > 删除该引用),但这是由与 out_path 相关的手动类型归属引起的。

你想要一个字符串切片,而不是一个拥有的 String:

let out_path: &str = &args[2];

这既符合 args 的限制(您不能移出索引内容),也符合 Path::new 的要求,后者需要引用。

至于你的评论,clone()“修复”了cannot move out of indexed content错误,因为它不需要从中移动args 向量 - 它从中复制一个元素。这个修复当然不如仅仅借用它,它也适用于 Path::new

关于rust - 为什么我不能将字符串从 env::Args 传递到 Path::new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52516145/

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