Ответ 1
Сначала посмотрим на вторую строку с ошибкой:
let cmd = Cmd::new(&None);
&None
создает временное время жизни одной строки. Cmd::new
возвращает a Cmd
, который имеет одинаковое время жизни. Затем мы пытаемся сохранить это временное значение в переменной с помощью let
.
Когда создается временное rvalue, которое назначается в let декларация, однако, временная создается со временем жизни вместо этого заключенный блок...
Он пытается увеличить время жизни Cmd
временное, но это зависит от времени жизни временного элемента &None
, и поскольку это временное значение фактически не хранится в let
(исключение из правила о временные данные, продолжающиеся до конца инструкции), его время жизни меньше времени жизни Cmd
, и вы получаете пожизненную ошибку.
Операторы прямой структуры работают, потому что время жизни let
относится к структуре и ее членам.
Тот факт, что он не работает для Some
(enum), кажется мне ошибкой (или, по крайней мере, отсутствующей функцией).