Невозможно вернуть вектор строковых фрагментов: заимствованное значение не живет достаточно долго

Я новичок в Rust и у меня возникли проблемы с проверкой заимствований. Я не понимаю, почему этот код не скомпилируется. Извините, если это близко к ранее отвеченному вопросу, но я не могу найти решение в других вопросах, на которые я смотрел.

Я понимаю сходство сВозврат локальной строки в виде среза (& str) но в этом случае возвращается только одна строка, и мне недостаточно рассуждать с моим кодом, в котором я пытаюсь вернуть вектор. Из того, что я понимаю, я пытаюсь вернуть ссылки наstr типы, которые выйдут из области видимости в конце функционального блока, и поэтому я должен отображать этот вектор&str в векторString? Я не так обеспокоен влиянием производительности преобразования&str вString, Сначала я бы хотел, чтобы все заработало.

Это код, ошибка вlex функция.

use std::io::prelude::*;
use std::fs::File;
use std::env;

fn open(mut s: &mut String, filename: &String) {
    let mut f = match File::open(&filename) {
        Err(_) => panic!("Couldn't open file"),
        Ok(file) => file,
    };
    match f.read_to_string(&mut s) {
        Err(_) => panic!("Couldn't read file"),
        Ok(_) => println!("File read successfully"),
    };

}

fn lex(s: &String) -> Vec<&str> {
    let token_string: String = s.replace("(", " ( ")
        .replace(")", " ) ");

    let token_list: Vec<&str> = token_string.split_whitespace()
        .collect();
    token_list
}

fn main() {
    let args: Vec<_> = env::args().collect();
    if args.len() < 2 {
        panic!("Please provide a filename");
    } else {
        let ref filename = args[1];

        let mut s = String::new();
        open(&mut s, filename);
        let token_list: Vec<&str> = lex(&s);
        println!("{:?}", token_list);
    }
}

Вот сообщение об ошибке

error: borrowed value does not live long enough
        self.0.borrow().values.get(idx)
        ^~~~~~~~~~~~~~~
reference must be valid for the anonymous lifetime #1 defined on the block at 23:54...
    pub fn value(&self, idx: usize) -> Option<&Value> {
                                                      ^
note: ...but borrowed value is only valid for the block at 23:54
    pub fn value(&self, idx: usize) -> Option<&Value> {
                                                      ^

Мне трудно рассуждать с этим кодом, потому что с моим уровнем опыта работы с Rust я не могу представить время жизни этих переменных. Буду признателен за любую помощь, поскольку я потратил час или два, пытаясь понять это.

Ответы на вопрос(1)

Ваш ответ на вопрос