Gru*_*sch 19 private rust tuple-struct
我正在研究一个基本的shell解释器,以熟悉Rust.在用于在shell中存储挂起作业的表上工作时,我遇到了以下编译器错误消息:
error: cannot invoke tuple struct constructor with private fields [E0450]
let jobs = job::JobsList(vec![]);
^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我不清楚在这里看到什么是私人的.如下所示,两个结构都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![]);
}
Run Code Online (Sandbox Code Playgroud)
huo*_*uon 28
正如错误消息所示,问题是JobsList有一个私有字段,也就是说,在Vec<Job>定义该模块的模块之外,该值是不可访问的struct.这意味着您无法对JobsList值进行模式匹配以提取它,并且您无法直接构造它.
有两个修复:
pub struct JobsList(pub Vec<Job>);提供公共构造函数
impl JobsList {
pub fn new(jobs: Vec<Job>) -> JobsList {
JobsList(jobs)
}
}
Run Code Online (Sandbox Code Playgroud)
叫起来像JobsList::new(vec![]).
| 归档时间: |
|
| 查看次数: |
5402 次 |
| 最近记录: |