[英]Returning a trait type with static dispatch
我試圖在以相同特征聲明的函數中返回靜態分派的特征,但是編譯器似乎無法在特征類型和具體類型之間進行映射。
例:
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 }
}
}
您可以在此處嘗試完整的示例: 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);
}
在這里, trade
函數被更改為始終返回為其實現的類型; 在Money
特質定義中,即Self
。 當你談論一個具體的實現,它的實現類型(所以它的Dollar
,當你實現Money
的Dollar
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.