gpt4 book ai didi

rust - 在匹配实现 Into 的值时使用移动的值

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

我想要一个同时接受 &str 的函数和 String .我知道的唯一方法是使用 Into<String> .

但是,在函数内部,我试图匹配 Into<String> .这会导致一些问题,因为 ARM 是 &str .

这就是我所拥有的(精简后的):

struct Location {
language: String,
}

fn new<Str>(language: Str) -> Location
where
Str: Into<String>,
{
Location {
language: {
match &*language.into() {
"canada" => "ca".to_owned(),
"uk" => "uk2".to_owned(),
_ => language.into(),
}
},
}
}

fn main() {}

这会产生错误:

error[E0382]: use of moved value: `language`
--> src/main.rs:14:22
|
11 | match &*language.into() {
| -------- value moved here
...
14 | _ => language.into(),
| ^^^^^^^^ value used here after move
|
= note: move occurs because `language` has type `Str`, which does not implement the `Copy` trait

我的目标是允许传入任何内容,使用 canadauk被换掉(其他一切都被单独留下)。

现在,它正在转换 language&str对于匹配运算符,效果很好。唯一的问题是我仍然需要引用 language对于默认 ARM 。

我应该如何着手解决这个问题?我缺少一些简单的方法来做到这一点吗?

最佳答案

Rust 足够聪明,可以看到匹配语句的 _ => 部分实际上并没有借用该值,因此您可以这样做

fn new<Str>(language: Str) -> Location
where
Str: Into<String>,
{
Location {
language: {
let s = language.into();
match &*s {
"canada" => "ca".to_owned(),
"uk" => "uk2".to_owned(),
_ => s,
}
},
}
}

( On the Playground )

关于rust - 在匹配实现 Into<String> 的值时使用移动的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494127/

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