impl Trait
與特徵界限類似,impl Trait
語法可用於 函式引數和回傳值中:
Speaker Notes
This slide should take about 5 minutes.
impl Trait
allows you to work with types which you cannot name. The meaning of impl Trait
is a bit different in the different positions.
-
對參數來說,
impl Trait
就像是具有特徵界限的匿名泛型參數。 -
對回傳型別來說,
impl Trait
代表回傳型別就是實作特徵的 某些具體型別,因而不必指名特定型別。如果您不想在公用 API 中公開具體型別, 這就非常有用。在回傳位置進行推論並不容易。回傳
impl Foo
的函式 會挑選自身回傳的具體型別,而不必在來源中寫出此資訊。回傳泛型型別 (例如collect<B>() -> B
) 的函式則可回傳 符合B
的任何型別 ,而呼叫端可能需要選擇一個型別,例如使用let x: Vec<_> = foo.collect()
或 Turbofish:foo.collect::<Vec<_>>()
。
思考一下,debuggable
的型別為何?您可以嘗試使用 let debuggable: () = ..
查看錯誤訊息顯示的內容。