Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct “为什么?”;can';t泄漏专用型“;仅适用于结构而不适用于枚举?_Struct_Enums_Rust_Private Members - Fatal编程技术网

Struct “为什么?”;can';t泄漏专用型“;仅适用于结构而不适用于枚举?

Struct “为什么?”;can';t泄漏专用型“;仅适用于结构而不适用于枚举?,struct,enums,rust,private-members,Struct,Enums,Rust,Private Members,在中,它们表明发布枚举不能保存私有结构: struct Node { elem: i32, next: List, } pub enum List { Empty, More(Box<Node>), } 这种差异的原因是什么?为什么私有枚举不会导致错误,而私有结构会导致错误?在第一个示例中,枚举列表是公共的。这意味着枚举变量More也是公共的。但是,More不能由外部代码使用,因为节点不是公共的。因此,您有一个外部可见但实际上无法使用的东西,这可能

在中,它们表明
发布枚举
不能保存私有
结构

struct Node {
    elem: i32,
    next: List,
}

pub enum List {
    Empty,
    More(Box<Node>),
}

这种差异的原因是什么?为什么私有枚举不会导致错误,而私有结构会导致错误?

在第一个示例中,枚举
列表是公共的。这意味着枚举变量
More
也是公共的。但是,
More
不能由外部代码使用,因为
节点
不是公共的。因此,您有一个外部可见但实际上无法使用的东西,这可能不是您想要的


在第二个示例中,struct
List
是公共的。但是,
head
字段不是公共字段。因此,
Link
是否公开并不重要,因为外部代码首先看不到
head
字段。

澄清一下,您是说在rust中,公共代码不能访问外部私有代码,但私有代码可以访问外部私有代码?
pub struct List {
    head: Link,
}

enum Link {
    Empty,
    More(Box<Node>),
}

struct Node {
    elem: i32,
    next: Link,
}