2015-05-28 17 views
6

Jakie jest znaczenie statyczne w tym kontekście?Jakie jest znaczenie "statycznego jako ograniczenia funkcji?

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

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

Rozumiem znakowania global_variablestatic jest podobny do tego, co statyczne oznacza IE. w C#, miejsce na zmienną jest przydzielane w oddzielnym segmencie pamięci, istniejącym dla całego wykonania programu.

static global_variable: i32 = 5; 

Ale nie rozumiem, co oznacza "statyczne ograniczenie". Czy w jakiś sposób awansowano, a jej życie zostało przedłużone, więc teraz żyje dla całej realizacji programu?

Czy to po prostu oznacza, że ​​zostanie zwolniony, gdy tylko przestanie go używać foo?

Odpowiedz

10

Umieszczenie ograniczenia takiego jak T: 'a oznacza, że ​​wszystkie parametry okresu użytkowania typu T muszą spełniać ograniczenie okresu istnienia 'a (w związku z tym muszą przeżyć to ograniczenie).

Na przykład, jeśli mam tego struct:

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

Kate<'a, 'b> zaspokoi ograniczenie F: Human + 'static tylko jeśli 'a == 'statici'b == 'static.

Jednak struktura bez żadnego parametru życia zawsze spełni wszelkie ograniczenia dotyczące okresu istnienia.

Więc jako podsumowanie, ograniczenie jak F: 'static oznacza, że ​​albo:

  • F ma parametr dożywotnią
  • wszystkie parametry Żywotność F'static
+0

Chciałeś 'Kate <'a, 'b>', dobrze? –

+0

O tak, rzeczywiście. Dzięki. – Levans

Powiązane problemy