我正在开发一个基本的 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
value 来提取它,并且您不能直接构造它。
有两个修复:
-
公开该字段pub struct JobsList(pub Vec<Job>);
-
提供一个公共构造函数
impl JobsList {
pub fn new(jobs: Vec<Job>) -> JobsList {
JobsList(jobs)
}
}
称为像JobsList::new(vec![])
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)