2015-03-09 8 views
5

Mam naprawdę trudne wskazówki dotyczące Rusta. Ten kod nie zostanie skompilowany, ponieważ: wrong number of lifetime parameters: expected 1, found 0 [E0107]. Co to znaczy?niepoprawna liczba parametrów w całym okresie życia: spodziewany 1, znaleziony 0

struct Planet<'a> { 
    name: &'a str, 
    radius_km: i32, 
    surface_area_km2: i64, 
    orbital_period_days: i32, 
    distance_from_sun: i64 
} 

fn mercury() -> Planet { 
    Planet { 
     name: "Mercury", 
     radius_km: 2_440, 
     surface_area_km2: 74_800_000, 
     orbital_period_days: 88, 
     distance_from_sun: 57_910_000 
    } 
} 

fn main() { 
    let mercury = Box::new(mercury()); 
    println!("{}",mercury.name) 
} 
+1

Należy zauważyć, że komunikat o błędzie * * zawiera linię problem, a nawet zawiera przedział ('^ ~~~ '), które [pozwala pokazać, gdzie problem IS] (http://is.gd/poWU1h) . – Shepmaster

Odpowiedz

6

To mówiąc, że definicja struct zawiera parametr typu, a więc tak musi swoją funkcję, która tworzy jeden.

struct Planet<'a>{ 
    name : &'a str, 
    radius_km: i32, 
    surface_area_km2: i64, 
    orbital_period_days: i32, 
    distance_from_sun: i64 
} 

fn mercury<'a>()->Planet<'a>{ 
    Planet{ 
     name:"Mercudy", 
     radius_km: 2_440, 
     surface_area_km2: 74_800_000, 
     orbital_period_days: 88, 
     distance_from_sun: 57_910_000 
    } 
} 

fn main(){ 
    let planet = mercury(); 
    println!("{}", planet.name) 
} 
+1

Podczas gdy ''a' działa, w tym przypadku równie dobrze możesz wybrać'' static', ponieważ ciąg żyje przez całe życie programu. – Shepmaster

+0

Osobiście po prostu zrobiłabym go String zamiast & quot cokolwiek, ale to nie jest pytanie. Ciekawe, jaka byłaby różnica między tymi dwiema opcjami. –

+1

Pomiędzy którymi dwie opcje? Jeśli użyjesz String, będziesz przydzielać pamięć za każdym razem, gdy będziesz nazywać 'rtęci', co nie jest tutaj naprawdę potrzebne. Jeśli pozostaniesz przy parametrze "rtęci" na całe życie, to * wywołujący * rtęci decyduje o tym, jakie będzie życie "a". Jest to w porządku, ponieważ żywotność "statyczna" zawsze przeżyje. Oznaczenie czasu życia jako "statycznego" wydaje się być bardziej elastyczne i użyteczne w tym przypadku. – Shepmaster

Powiązane problemy