在Learning Rust With Entirely Too Many Linked Lists , 它们表明 pub enum
不能包含私有(private) struct
:,
struct Node {
elem: i32,
next: List,
}
pub enum List {
Empty,
More(Box<Node>),
}
这会导致编译器报错:
error[E0446]: private type `Node` in public interface
--> src/main.rs:8:10
|
8 | More(Box<Node>),
| ^^^^^^^^^^ can't leak private type
但是即使 Link
是私有(private)的,这段代码也不会导致错误:
pub struct List {
head: Link,
}
enum Link {
Empty,
More(Box<Node>),
}
struct Node {
elem: i32,
next: Link,
}
造成这种差异的原因是什么?为什么私有(private)枚举不会导致错误而私有(private)结构会导致错误?
最佳答案
在第一个例子中,枚举 List
是公开的。这意味着枚举变量 More
也是公开的。但是,More
不能被外部代码使用,因为 Node
不是 公开的。因此,您有一个外部可见的东西,但实际上不能使用,这可能不是您想要的。
在第二个例子中,List
结构是公开的。但是,head
字段是不 公开的。因此,Link
是否公开并不重要,因为外部代码首先看不到 head
字段。
关于struct - 为什么 "can' t 泄漏私有(private)类型“仅适用于结构而不适用于枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46680064/