1
形質で抽象関数を呼び出すと思われるwebsocketライブラリに複雑なコードがいくつか見つかりました。抽象関数を呼び出すことはできますか?
fn recv_message<'m, D, M, I>(&mut self) -> WebSocketResult<M>
where M: Message<'m, D, DataFrameIterator = I>,
I: Iterator<Item = D>,
D: DataFrame
{
let dataframes = try!(self.recv_message_dataframes());
Message::from_dataframes(dataframes) // Isn't this an abstract function?
}
ws::Message
形質のコード:錆を呼び出すように機能しているか分からないでしょうので、それが動作してはならないように見えます
pub trait Message<'a, F>: Sized
where F: DataFrame
{
type DataFrameIterator: Iterator<Item = F>;
fn from_dataframes<D>(frames: Vec<D>) -> WebSocketResult<Self> where D: DataFrame;
fn dataframes(&'a self) -> Self::DataFrameIterator;
}
。どのように機能するのですか?
錆のタイプのシステムはとてもスマートです!回答ありがとうございます ! –
@AtsukiTakahashi:Pedantically、これは型システムではなくコンパイラがここでスマートです。そしてはい、rustcはすべての種類のスマートです! –