2015-05-28 8 views
6

Qual è il significato di statico in questo contesto?Qual è il significato di 'static as a function constraint?

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

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

Capisco marcatura global_variablestatic è simile a quello statico mezzi cioè. in C#, lo spazio per la variabile viene allocato in un segmento separato della memoria, esistente per l'intera esecuzione del programma.

static global_variable: i32 = 5; 

Ma quello che non capisco cosa dare 'vincolo statico significa. kate è in qualche modo promosso e la sua vita è estesa così ora vive anche per l'intera esecuzione del programma?

O significa semplicemente che verrà deallocato non appena foo interrompe l'utilizzo?

risposta

10

Inserire un vincolo come T: 'a significa che tutti i parametri di durata del tipo T devono soddisfare il limite di durata 'a (quindi, deve sopravvivere).

Per esempio, se ho questo struct:

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

Kate<'a, 'b> in grado di soddisfare il vincolo F: Human + 'static solo se 'a == 'statice'b == 'static.

Tuttavia, una struttura senza alcun parametro di durata soddisferà sempre qualsiasi vincolo di durata.

Quindi, come una sintesi, un vincolo simile F: 'static significa che:

  • F senza alcun parametro vita
  • tutti i parametri di durata di F sono 'static
+0

Si intende 'Kate <'a, 'b>', destra? –

+0

Oh sì, davvero. Grazie. – Levans