我用 Rust 编写了以下代码。版本为 0.12.0-pre-nightly。
struct Sample<T> {
x: T
}
impl<T> Sample<T> {
pub fn new<T>(v: T) -> Sample<T> {
Sample { x: v }
}
pub fn get<T>(&self) -> T {
self.x
}
}
fn main() {
Sample::new(0i).get(); // expect int 0
}
编译错误。
hoge.rs:11:9: 11:15 error: mismatched types: expected `T`, found `T` (expected type parameter, found type parameter)
hoge.rs:11 self.x
我无法通过编译器消息找出示例程序无法编译的原因。 我该如何解决?
最佳答案
不要将类型参数放在您的方法上。他们必须使用 impl
中的那个.
struct Sample<T> {
x: T
}
impl<T> Sample<T> {
pub fn new(v: T) -> Sample<T> {
Sample { x: v }
}
pub fn get(&self) -> T {
self.x
}
}
fn main() {
Sample::new(0i).get(); // expect int 0
}
P.S.:该代码也无法编译,因为 get
试图移动x
来自 &self
.您可以更改 impl<T>
至 impl<T: Copy>
如果你只想使用可复制类型,或者更改 get
返回引用:
pub fn get(&self) -> &T {
&self.x
}
关于compiler-errors - 具有泛型编译错误的 Rust 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071757/