2014-12-01 14 views
7

Tôi có một dự án nhỏ và tôi muốn đóng gói các trường của cấu trúc và sử dụng các phương thức đã triển khai.Cấu trúc công khai/riêng tư trong Rust

├── src 
├── main.rs 
├── predator 
└── prey 
    ├── cycle.rs 
    └── mod.rs 

cycle.rs

struct Prey { 
    name: String, 
} 

impl Prey { 
    pub fn new(n: String) -> Prey { 
     Prey { name: n } 
    } 

    pub fn get_name(&self) -> &str { 
     self.name.as_str() 
    } 
} 

Tôi muốn để lại Prey như tư nhân.

main.rs

use prey::cycle::Prey; 
mod prey; 

fn main() { 
    let pr = Prey::new("Hamster".to_string()); 
    println!("Hello, world! {}", pr.get_name()); 
} 

tôi nhận được một lỗi:

error: struct `Prey` is private 

Tôi biết rằng nếu tôi đặt pub trước struct Prey {}, tôi sẽ nhận được kết quả mong đợi. Tôi sẽ biết ơn vì một lời giải thích, làm thế nào, tại sao không và/hoặc thực hành tốt nhất.

Trả lời

8

Khả năng hiển thị hoạt động ở cấp mô-đun. Nếu bạn muốn mô-đun X có quyền truy cập vào một số item trong mô-đun Y, thì mô-đun Y phải công khai mô-đun đó.

Mô-đun cũng là các mục. Nếu bạn không tạo mô-đun công khai, thì nội dung đó sẽ nằm trong thùng của bạn. Do đó, bạn không nên lo lắng về việc tạo các mục trong mô-đun đó công khai; chỉ thùng của bạn mới có quyền truy cập vào nó.

Gốc thùng (thường là file có tên lib.rs hoặc main.rs) là module gốc của thùng của bạn. Nó định nghĩa giao diện công cộng của thùng, tức là các mặt hàng công cộng trong thư mục gốc có thể truy cập từ các thùng khác.

Trong ví dụ của bạn, bạn viết mod prey;. Định nghĩa mô-đun prey là riêng tư, vì vậy các mục trong mô-đun prey không thể truy cập được từ các thùng khác (trừ khi bạn báo cáo lại chúng với pub use). Điều đó có nghĩa là bạn nên thực hiện công khai prey::cycle::Prey.

+0

đoạn cuối cùng đặt mọi thứ vào đúng vị trí, cảm ơn. –

Các vấn đề liên quan