为什么我的特征定义可以在2015版中编译,而不能在2018版中编译?

时间:2019-02-09 15:03:57

标签: rust rust-2018

我写了这个简单的程序:

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.rsrustc main.rs进行编译不会导致此错误。

此代码有什么问题?

1 个答案:

答案 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