2014-06-08 4 views
8

저는 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

는 문제가 Vec<Job>struct 정의 모듈 밖에서 액세스 할 수없는, 즉 JobsList 개인 필드를 갖는다. 즉, JobsList 값에서 패턴 일치를 추출하여 추출 할 수 없으며 직접 구성 할 수 없다는 것을 의미합니다.

  • pub struct JobsList(pub Vec<Job>);
  • 공공 필드 JobsList::new(vec![])처럼라는 public 생성자

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

    을 제공합니다

    이 수정 사항이있다.