У меня есть тест на прогрессе, который не компилируется:Декларирование жизни на тестовой функции
#[test]
fn node_cost_dequeue() {
let mut queue: BinaryHeap<&NodeCost> = BinaryHeap::new();
let cost_1: NodeCost = NodeCost::new(1, 50, 0);
let cost_2: NodeCost = NodeCost::new(2, 30, 0);
let cost_3: NodeCost = NodeCost::new(3, 80, 0);
queue.push(&cost_1);
queue.push(&cost_2);
queue.push(&cost_3);
assert_eq!(2, (*queue.pop().unwrap()).id);
}
Результатов в error: cost_1 does not live long enough
С дополнительной информацией, что «позаимствовали стоимость упала до того заемщика».
Поэтому я пытаюсь добавить явные аннотации для жизни.
#[test]
fn node_cost_dequeue() {
let mut queue: BinaryHeap<&'a NodeCost> = BinaryHeap::new();
let cost_1: NodeCost<'a> = NodeCost::new(1, 50, 0);
let cost_2: NodeCost<'a> = NodeCost::new(2, 30, 0);
let cost_3: NodeCost<'a> = NodeCost::new(3, 80, 0);
queue.push(&cost_1);
queue.push(&cost_2);
queue.push(&cost_3);
assert_eq!(2, (*queue.pop().unwrap()).id);
}
Это результат use of undeclared lifetime name 'a
.
Таким образом, я пытаюсь объявить его функции
fn node_cost_dequeue<'a>() ->() {
Но это приводит к error: functions used as tests must have signature fn() ->()
Я на правильном пути? Как объявить эту жизнь?
В этом вопросе вы можете найти несколько аналогичный случай (хотя со скрытой утечкой из-за того же времени жизни обоих объектов) [http://stackoverflow.com/q/39827244/1870153). – ljedrz
См. Также [Как инициализировать переменную со временем жизни?] (Http://stackoverflow.com/questions/28108689/how-to-initialize-a-variable-with-a-lifetime) => вы не можете, всю жизнь * аннотация * не обеспечивает срок службы, она просто документирует ее. –