rustc –explain E0782 日本語訳
特質オブジェクトは 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版以前は許可されていましたが、現在はエラーとなります。
rustc –explain E0782
Trait objects must include the dyn
keyword.
Erroneous code example:
trait Foo {}
fn test(arg: Box<Foo>) {} // error!
Trait objects are a way to call methods on types that are not known until runtime but conform to some trait.
Trait objects should be formed with Box<dyn Foo>
, but in the code above dyn
is left off.
This makes it harder to see that arg
is a trait object and not a simply a heap allocated type called Foo
.
To fix this issue, add dyn
before the trait name.
trait Foo {}
fn test(arg: Box<dyn Foo>) {} // ok!
This used to be allowed before edition 2021, but is now an error.
error[E0782]: trait objects must include the dyn keyword
error[E0782]: trait objects must include the `dyn` keyword
--> src\main.rs:26:42
|
26 | fn run(config: Config) -> Result<(), Box<Error>> {
| ^^^^^
|
help: add `dyn` keyword before this trait
|
26 | fn run(config: Config) -> Result<(), Box<dyn Error>> {
| +++