在Learning Rust With Entirely Too Many Linked Lists中,他们显示pub enum
不能容纳私有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
是私有的,此代码也不会导致错误:
pub struct List {
head: Link,
}
enum Link {
Empty,
More(Box<Node>),
}
struct Node {
elem: i32,
next: Link,
}
这种差异的原因是什么?为什么私有枚举不会导致错误,而私有 struct 会导致错误?