У меня возникли проблемы с определением функции, которая возвращает вектор Node
из выбранного ящика, v0.2.2. Я добавлял к этой функции, как я работал мой путь через сообщения об ошибках (с помощью других вопросов в Интернете), но я не могу понять, как присвоить переменную 'a
пожизненных для возвращаемого значения:Как назначить время жизни при возврате результата документа :: find из ящика выбора?
extern crate select;
use select::document::Document;
use select::predicate::*;
fn elems_by_class<'a, Node>(document: &'a Document, class: &str) -> Vec<Node<>>
where Vec<Node>: std::iter::FromIterator<select::node::Node<'a>>
{
document.find(Attr("class", class)).iter().collect::<Vec<Node<>>>()
}
fn main() {}
ошибка я получаю
error: borrowed value does not live long enough
--> src/main.rs:9:5
|
9 | document.find(Attr("class", class)).iter().collect::<Vec<Node<>>>()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ temporary value created here
10 | }
| - temporary value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the block at 8:0...
--> src/main.rs:8:1
|
8 | {
|^
Как я могу назначить 'a
жизни для вызова функции? Я попытался (неудачно) использовать переменные, но прочитал, что переменные, созданные внутри тела функции, могут вызвать проблемы, поэтому отказ от этого подхода. Я вырыл себе слишком далеко вниз по стволу зайца, и должна ли эта функция быть определена более простым способом?
Примечание: вы не * назначаете * жизни, вы * документируете их. Вы можете думать об этом как о * создании * против * открытия *, или как шутка идет «Но если кислород был обнаружен в 1770 году, как люди дышали раньше?». Ключевое понимание заключается в том, что существуют времена жизни, назовите их или нет; и все, что вы делаете, называет их, чтобы лучше понять их отношения (и проверить их компилятор). Может быть, я должен быть товарным знаком? * Время жизни похоже на кислородный лакомый кусочек? Звучит лучше, чем буррито. –