2015-05-28 2 views
6

В чем смысл статичности в этом контексте?В чем смысл 'static как ограничение функции?

fn foo<F: Human + 'static>(param: F) {}

fn main() { 
    let kate = Kate { age: 30 }; 
    foo(kate); 
} 

Я понимаю, маркировка global_variablestatic похожа на то, что статические средства ИЭ. в C#, пространство для переменной выделяется в отдельный сегмент памяти, существующий для всего выполнения программы.

static global_variable: i32 = 5; 

Но я не понимаю, что означает «статическое ограничение». kate каким-то образом продвигается, и ее продолжительность жизни продлена, так что теперь она живет и для всей реализации программы?

Или это просто означает, что он будет освобожден, как только foo перестанет его использовать?

ответ

10

Включение ограничения, как T: 'a, означает, что все параметры времени жизни типа T должны удовлетворять ограничению времени жизни 'a (таким образом, он должен пережить его).

Например, если у меня есть эта структура:

struct Kate<'a, 'b> { 
    address: &'a str, 
    lastname: &'b str 
} 

Kate<'a, 'b> будет удовлетворять ограничение F: Human + 'static только если 'a == 'staticи'b == 'static.

Однако структура без какого-либо параметра времени жизни всегда будет удовлетворять любому ограничению времени жизни.

Так как итог, ограничение как F: 'static означает, что либо:

  • F не имеет параметра пожизненной
  • все параметры прижизненных из F являются 'static
+0

Вы имели в виду 'Кейт <'a, 'b>', правильно? –

+0

О да, действительно. Благодарю. – Levans