2017-08-21 36 views
5

Tôi đang cố gắng hiểu chính xác phạm vi dành cho các hàm được xác định trong khối impl nhưng không chấp nhận tham số &self. Ví dụ, tại sao không đoạn mã sau đây biên dịch? Tôi nhận được lỗi "không thể tìm thấy chức năng generate_a_result trong phạm vi này".Quy tắc phạm vi rỉ sét cho các hàm do thuộc tính cấu trúc

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

Trả lời

6

Các chức năng này được gọi là chức năng liên quan đến. Và họ sống trong không gian tên của loại. Họ luôn phải được gọi là Type::function(). Trong trường hợp của bạn, đó là Blob::generate_a_result(). Nhưng để đề cập đến loại của riêng bạn, có từ khóa đặc biệt Self. Vì vậy, giải pháp tốt nhất là:

Self::generate_a_result() 
Các vấn đề liên quan