2017-08-21 91 views
5

Próbuję zrozumieć, czym dokładnie jest zakres funkcji zdefiniowanych w bloku impl, ale które nie akceptują parametru &self. Na przykład, dlaczego poniższy fragment kodu nie jest kompilowany? Pojawia się błąd "nie można znaleźć funkcji generate_a_result w tym zakresie".Reguły ustalania zasięgów dla funkcji strukturalnych

pub struct Blob { 
    num: u32, 
} 

impl Blob { 
    pub fn new() -> Blob { 
     generate_a_result() 
    } 

    fn generate_a_result() -> Blob { 
     let result = Blob { 
      num: 0 
     }; 

     result 
    } 
} 

Odpowiedz

6

Funkcje te są nazywane związane funkcje. I żyją w przestrzeni nazw tego typu. Zawsze muszą być nazywane jak Type::function(). W twoim przypadku jest to Blob::generate_a_result(). Ale w celu odnoszenia się do własnego typu istnieje specjalne słowo kluczowe Self. Najlepszym rozwiązaniem jest:

Self::generate_a_result()