Ema*_*uel 2 generics traits rust
我试图在同一特征中声明的函数中返回静态调度的特征,但编译器似乎无法在特征类型和具体类型之间进行映射.
例:
trait Money {
fn trade<M>(&self) -> M
where M: Money;
}
impl Money for Dollar {
fn trade<M>(&self) -> M
where M: Money
{
Dollar { amount: self.amount / 2 }
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处试用完整的示例:http://is.gd/alQGv0
编译器就在这里.你告诉它的是你正在实现一个函数trade,对于任何M调用者关心使用的函数(只要它实现Money),你将返回一个实例M.然后你去尝试返回一个Dollar.如果M不是Dollar?
从上下文来看,您可能需要的是以下内容:
trait Money {
fn trade(&self) -> Self;
}
struct Dollar {
amount: usize,
}
impl Money for Dollar {
fn trade(&self) -> Dollar
{
Dollar { amount: self.amount / 2 }
}
}
fn main() {
let x = Dollar { amount: 10 };
println!("{}", x.trade().amount);
}
Run Code Online (Sandbox Code Playgroud)
这里,trade函数被改为总是返回它实现的类型; 在Money特质定义中,那就是Self.当你谈论一个具体的实现,它的实现类型(所以它是Dollar当你实现Money了Dollar).
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |