如何从不同的模块实例化公共元组结构(带私有字段)?

问题描述 投票:1回答:2

我有一个模块,其中元组结构定义为:

#[derive(Clone, Default, Eq, Hash, PartialEq, PartialOrd)]
pub struct Id(Vec<u8>);

我在另一个需要在那里导入的模块中使用了这个结构。但是当我尝试将这个结构Id实例化为:

let mut id = Id(newId.as_bytes().to_vec()); //newId is a String

它抛出一个错误说:

由于私有字段,此处不显示构造函数

如何将未命名的字段公开(虽然我不能,因为这是API的一部分)?或者有没有不同的方法来初始化这个结构?

struct rust
2个回答
3
投票

字段0是私人的,你可以像这样公开

pub struct Id(pub Vec<u8>);

或者你添加一个这样的显式构造函数

impl Id {
    pub fn new(param: Vec<u8>) -> Id {
        Id(param)
    }
}

并称之为

let mut id = Id::new("newId".as_bytes().to_vec());

1
投票

如果您不想在全球范围内公开内容,但希望在某个模块中显示,则可以使用visibility qualifiers。例:

pub struct Id(pub(crate) Vec<u8>);
© www.soinside.com 2019 - 2024. All rights reserved.