我有一个模块,其中元组结构定义为:
#[derive(Clone, Default, Eq, Hash, PartialEq, PartialOrd)]
pub struct Id(Vec<u8>);
Run Code Online (Sandbox Code Playgroud)
我在另一个需要导入的模块中使用了这个结构。但是当我尝试将这个结构实例Id化为:
let mut id = Id(newId.as_bytes().to_vec()); //newId is a String
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误说:
由于私有字段,构造函数在此处不可见
如何公开未命名的字段(尽管在我的情况下不能公开,因为这是 API 的一部分)?还是有不同的方法来初始化这个结构?
该字段0是私有的,您可以像这样公开它
pub struct Id(pub Vec<u8>);
Run Code Online (Sandbox Code Playgroud)
或者你添加一个像这样的显式构造函数
impl Id {
pub fn new(param: Vec<u8>) -> Id {
Id(param)
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为
let mut id = Id::new("newId".as_bytes().to_vec());
Run Code Online (Sandbox Code Playgroud)
如果您不想向全世界公开某些内容,但希望使其在某个模块中可见,则可以使用可见性限定符。例子:
pub struct Id(pub(crate) Vec<u8>);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |