作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个同时接受 &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
我的目标是允许传入任何内容,使用 canada
和 uk
被换掉(其他一切都被单独留下)。
现在,它正在转换 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,
}
},
}
}
关于rust - 在匹配实现 Into<String> 的值时使用移动的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494127/
我是一名优秀的程序员,十分优秀!