dyn Trait trait 对象
dyn Trait 是使用 trait 对象的新语法,简而言之:
Box<Trait>becomesBox<dyn Trait>&Traitand&mut Traitbecome&dyn Traitand&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。