特質オブジェクトは dyn
キーワードを含んでいなければなりません。
誤ったコード例
trait Foo {}
fn test(arg: Box<Foo>) {}. // エラー!
特質オブジェクトは、実行するまでわからないが、ある特質に適合する型のメソッドを呼び出すための方法です。
特質オブジェクトは Box<dyn Foo>
で形成されるべきですが、上のコードでは dyn
が省略されています。
このため、arg
が単にヒープに確保された Foo
という型ではなく、特質オブジェクトであることがわかりにくくなっています。
この問題を解決するには、特質名の前に dyn
を追加します。
trait Foo {}
fn test(arg: Box<dyn Foo>){}。// ok!
2021版以前は許可されていましたが、現在はエラーとなります。