dyn Trait
trait 对象
dyn Trait
是使用 trait 对象的新语法,简而言之:
Box<Trait>
becomesBox<dyn Trait>
&Trait
and&mut Trait
become&dyn Trait
and&mut dyn Trait
因此,代码中:
#![allow(unused_variables)] fn main() { trait Trait {} impl Trait for i32 {} // old fn function1() -> Box<Trait> { unimplemented!() } // new fn function2() -> Box<dyn Trait> { unimplemented!() } }
这就是了!
更多细节
仅仅使用特征对象的特征名其实是个糟糕的决定。目前的语法通常含糊不清,即使对于老一批人来来说也是如此, 而且竟然没有它的替代品使用的更频繁,有时速度较慢,而且当其替代品可以使用时,它将根本不会被使用。
此外,随着 impl Trait
的到来,impl Trait
vs dyn Trait
比 impl Trait
vs Trait
更好更对称。
impl Trait
将在下一节进一步解释。
因此,在新版本中,选择使用 trait 对象时,你应该选 dyn Trait
而不是 Trait
。