我有一个模块,其中元组结构定义为:
#[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的一部分)?还是有其他方法初始化此结构?
答案 0 :(得分: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 :(得分:1)
如果您不想在全球范围内公开某些东西,但希望在某个模块中公开它,则可以使用visibility qualifiers。示例:
pub struct Id(pub(crate) Vec<u8>);