我写了这个简单的程序:
trait Command<T> {
fn execute(&self, &mut T);
}
fn main() {
let x = 0;
}
我使用rustc --edition=2018 main.rs
进行了编译,并收到错误消息:
error: expected one of `:` or `@`, found `)`
--> main.rs:2:29
|
2 | fn execute(&self, &mut T);
| ^ expected one of `:` or `@` here
尽管有一些警告,但通过rustc --edition=2015 main.rs
或rustc main.rs
进行编译不会导致此错误。
此代码有什么问题?
答案 0 :(得分:9)
匿名特质参数已在2018年版No more anonymous trait parameters中删除。
如果要忽略参数,请在_:
前添加&mut T
trait Command<T> {
fn execute(&self, _: &mut T);
}
使用rustc main.rs
进行编译是有效的,因为它默认为--edition=2015
。
实际上,如果您将main.rs
放在新的Cargo项目中,请从edition = "2018"
中删除Cargo.toml
,然后运行
cargo fix --edition
然后,货运将自动添加缺少的_:
。参见Transitioning an existing project to a new edition。