gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:41:24 25 4
gpt4 key购买 nike

我正在研究一个基本的 shell 解释器,以熟悉 Rust。在 shell 中处理用于存储挂起作业的表时,我遇到了以下编译器错误消息:

error: cannot invoke tuple struct constructor with private fields [E0450]
let jobs = job::JobsList(vec![]);
^~~~~~~~~~~~~

我不清楚什么在这里被视为私有(private)。正如您在下面看到的,这两个结构在我的模块文件中都用 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有一个私有(private)字段,即Vec<Job>在定义 struct 的模块之外无法访问该值.这意味着您不能在 JobsList 上进行模式匹配提取它的值,并且您不能直接构造它。

有两个修复:

  • 公开该字段 pub struct JobsList(pub Vec<Job>);

  • 提供公共(public)构造函数

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

    被称为JobsList::new(vec![]) .

关于rust - 元组结构构造函数提示私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24110970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com