Я пытаюсь написать синтаксический анализатор с pom, и это здорово - нет проблем с написанием синтаксических анализаторов. и подача строкового литерала в качестве тестовых данных. Однако, когда я пытаюсь запустить его байтами из файла, он задыхается;
108 | fn parse_files() -> Result<(), Box<dyn Error>> {
109 | let byte_vec: Vec<u8> = std::fs::read("assets/valid_so_far.idl")?;
110 | let byte_slice: &[u8] = &byte_vec;
| ^^^^^^^^^ borrowed value does not live long enough
111 | let idl_parser = idl();
112 | let parse_result = idl_parser.parse(byte_slice)?;
| ---------------------------- argument requires that `byte_vec` is borrowed for `'static`
113 |
114 | Ok(())
115 | }
| - `byte_vec` dropped here while still borrowed
Я не вижу, что здесь происходит не так. Я не могу здесь интерпретировать ошибку компилятора и не понимаю, почему время жизни здесь не в порядке.
Функция parse
в строке 109 имеет следующую подпись:
fn parse(&self, input: &'a [I]) -> Result<O>
pub type Result<O> = ::std::result::Result<O, Error>;
Error
, возвращаемымparse
. Может быть, с точки зрения компилятора, он может содержать ссылку на ввод, поэтому он не должен пережить его, будучи возвращенным... Не могли бы вы поделиться подробнее о самом синтаксическом анализаторе? - person michalsrb   schedule 18.12.2019match
результатidl_parser.parse(byte_slice)
вручную и конвертируетеErr
во что-то, что точно не относится кbyte_slice
? - person phimuemue   schedule 18.12.2019