Rust 1.27. では、新しい構文が導入されました-dyn
キーワードが追加されました。
// old => new
Box<Foo> => Box<dyn Foo>
&Foo => &dyn Foo
&mut Foo => &mut dyn Foo
それは実際に何をし、なぜ追加されたのですか?
これは、特性/特性オブジェクトと構造体を区別するのに役立ちます。 &Foo
、Box<Foo>
およびimpl Bar for Foo
は曖昧でした。なぜならそれらのすべてでFoo
が特性または構造体であったかもしれないからです。
dyn
の追加により、これは曖昧ではなくなりました。特性はdyn
キーワードによって区別されるためです。
// trait objects (new dyn syntax)
&Foo => &dyn Foo
&mut Foo => &mut dyn Foo
Box<Foo> => Box<dyn Foo>
// structs (no change)
&Bar
&mut Bar
Box<Bar>