簡體   English   中英

通過靜態調度返回特征類型

[英]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 ,當你實現MoneyDollar )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM