2014-06-08 66 views
8

我正在使用一個基本的shell解釋器來熟悉Rust。而在工作表在外殼存儲暫停的作業,我已經得到被困在下面的編譯器錯誤消息:Tuple結構構造函數對私有域的抱怨

error: cannot invoke tuple struct constructor with private fields [E0450] 
    let jobs = job::JobsList(vec![]); 
       ^~~~~~~~~~~~~ 

這是我不清楚什麼是被視爲私人這裏。正如你在下面看到的,這兩個結構在我的模塊文件中都被標記爲pub。那麼,祕訣是什麼?

mod job { 
    use std::fmt; 

    pub struct Job { 
     jid: isize, 
     pid: isize, 
     cmd: String, 
    } 

    pub struct JobsList(Vec<Job>); 
} 

fn main() { 
    let jobs = job::JobsList(vec![]); 
} 

回答

13

作爲錯誤信息顯示,這個問題是JobsList具有私有字段,即,Vec<Job>值是不可訪問定義struct模塊外部。這意味着您無法在JobsList值上進行模式匹配以提取它,並且無法直接構建它。

有兩個定位:

  • 讓業界人士pub struct JobsList(pub Vec<Job>);
  • 提供的公共構造

    impl JobsList { 
        pub fn new(jobs: Vec<Job>) -> JobsList { 
         JobsList(jobs) 
        } 
    } 
    

    稱爲像JobsList::new(vec![])

相關問題