2014-10-28 14 views
3

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

Я начал с базовой структурой

struct Signal<T> { 
    slots: Vec<|T|> 
} 

, который получил мне первоначальную ошибку пожизненную

signal_test.rs:7:16: 7:19 error: explicit lifetime bound required 
signal_test.rs:7  slots: Vec<|T|> 
          ^~~ 
error: aborting due to previous error 

Так что в следующем я попробовать добавить несколько пожизненных спецификаторов.

struct Signal<'r, T> { 
    slots: Vec<'r |T|> 
} 

который получает мне некоторые новые ошибки

signal_test.rs:7:12: 7:23 error: wrong number of lifetime parameters: expected 0, found 1 [E0107] 
signal_test.rs:7  slots: Vec<'r |T|> 
         ^~~~~~~~~~~ 
signal_test.rs:7:19: 7:22 error: explicit lifetime bound required 
signal_test.rs:7  slots: Vec<'r |T|> 

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

ответ

3

Попробуйте использовать это:

struct Signal<'r, T> { 
    slots: Vec<|T|: 'r> 
} 
+0

Эй, что работал! Не могли бы вы объяснить часть синтаксиса: r>, каждый пример, который я видел, ставит спецификатор жизненного цикла перед типом. –

+1

@EricY, именно так указаны сроки жизни замыканий. Это особый случай. Еще один - границы объектов объектов, которые выглядят так: 'Box '. Вам просто нужно привыкнуть к этому :) –

+1

@EricY, текущие закрытия, однако, будут удалены в пользу распакованных закрытий в ближайшем будущем, поэтому этот бит синтаксиса, вероятно, полностью исчезнет. –