2017-08-21 4 views
5

implブロック内に定義された関数のスコープが正確に何であるかを理解しようとしていますが、&selfをパラメータとして受け入れません。たとえば、次のようなコードをコンパイルできないのはなぜですか?私はエラー "この範囲内に関数generate_a_resultが見つかりません"を取得します。構造体所有関数の錆のスコープ規則

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 
    } 
} 

答えて

6

これらの機能は、関連する機能と呼ばれています。そして彼らはそのタイプの名前空間に住んでいます。彼らはいつもType::function()のように呼び出さなければなりません。あなたの場合は、それはBlob::generate_a_result()です。しかし、自分のタイプを参照するには、特別なキーワードSelfがあります。したがって、最良のソリューションは、

Self::generate_a_result() 
です。
関連する問題