Почему мое определение черты компилируется с выпуском 2015 года, но не с выпуском 2018 года? - PullRequest
0 голосов
/ 09 февраля 2019

Я написал эту простую программу:

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 Ответ

0 голосов
/ 09 февраля 2019

Параметры анонимных черт были удалены в редакции 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 добавит недостающие _:автоматически.См. Переход существующего проекта в новую редакцию .

...