我正在研究一个基本的shell解释器,以熟悉Rust。在处理将挂起的作业存储在shell中的表时,我遇到了以下编译器错误消息:
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![]);
}
最佳答案
如错误消息所示,问题是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![])
一样调用。
关于rust - 元组struct构造函数提示私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359939/