Rust 如何定义引用参数的trait函数
我在尝试不同的解决方法时遇到了这个问题 我试图定义一个trait,它通过引用接受一个参数,并返回Rust 如何定义引用参数的trait函数,rust,Rust,我在尝试不同的解决方法时遇到了这个问题 我试图定义一个trait,它通过引用接受一个参数,并返回Self,如下所示: struct X {} trait CopyFrom { fn copy_from(&x: X) -> Self; } 我得到的错误是: error[E0642]: patterns aren't allowed in functions without bodies --> src/main.rs:5:18 | 5 | fn cop
Self
,如下所示:
struct X {}
trait CopyFrom {
fn copy_from(&x: X) -> Self;
}
我得到的错误是:
error[E0642]: patterns aren't allowed in functions without bodies
--> src/main.rs:5:18
|
5 | fn copy_from(&x: X) -> Self;
| ^^ pattern not allowed in function without body
如果我按值取x
,它编译得很好(但这会消耗参数,我不希望这样)
Rust参考文件中有这样一句话:
参数的模式类型仅限于以下类型之一:
以下:
- 标识符
- mut标识符
- _
- &标识符
- &&标识符
我找不到任何其他东西可以解释为什么我不能定义一个引用参数的trait函数。您在这里使用了错误的语法-
&x:x
是一个取消引用x
类型参数的函数;换句话说,
fn f(&x: X) {
// ...
}
相当于
fn f(x: X) {
let &x = x;
}
这反过来意味着
fn f(x: X) {
let x = *x;
}
相反,您希望使参数本身成为引用:
fn f(x: &X) { // take argument by reference
// ...
}