Почему мое определение черты компилируется с выпуском 2015 года, но не с выпуском 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.rs
или же rustc main.rs
не вызывает эту ошибку, хотя есть некоторые предупреждения.
В чем проблема с этим кодом?
1 ответ
Решение
Параметры анонимных черт были удалены в выпуске 2018 года: больше никаких анонимных параметров черт.
добавлять _:
до &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
тогда Cargo добавит недостающие _:
автоматически. См. Переход существующего проекта к новой редакции.