rust - 元组struct构造函数提示私有(private)字段

标签 rust private tuple-struct

我正在研究一个基本的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/

相关文章:

recursion - 如果 Rust 中的语句类型不匹配,则递归函数

inheritance - Fortran 2003/2008 中的 protected 继承

Java方法访问

rust - 元组结构构造函数提示私有(private)字段

struct - 如何像解包经典元组一样解包元组结构?

iterator - 为什么在具有推断 Item 类型的 Iter 上调用 cloned() 允许将其传递到此函数中?

rust - 当输入非常清楚时,为什么借用检查器需要输出生命周期标签?

python - 从类访问私有(private)模块变量

rust - 将可变自引用传递给拥有对象的方法