我在Rust中编写了以下代码。版本是0.12.0-每晚。
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
我无法通过编译器消息弄清楚为什么无法编译示例程序。 我该如何解决?
答案 0 :(得分:1)
不要在您的方法上放置类型参数。他们必须使用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
}