相关疑难解决方法(0)

为什么"不能泄漏私人类型"只适用于结构而不是枚举?

请考虑以下代码

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

pub enum List {
    Empty,
    More(Box<Node>),
}
Run Code Online (Sandbox Code Playgroud)

这会导致编译器抱怨:

error[E0446]: private type `Node` in public interface
 --> src/main.rs:8:10
  |
8 |     More(Box<Node>),
  |          ^^^^^^^^^^ can't leak private type
Run Code Online (Sandbox Code Playgroud)

但是这段代码即使Link是私有的也不会导致错误:

pub struct List {
    head: Link,
}

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

struct Node {
    elem: i32,
    next: Link,
}
Run Code Online (Sandbox Code Playgroud)

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

rust

6
推荐指数
1
解决办法
874
查看次数

标签 统计

rust ×1