【问题标题】:Why does "can't leak private type" only apply to structs and not enums?为什么“不能泄漏私有类型”只适用于结构而不适用于枚举?
【发布时间】:2018-03-22 15:32:14
【问题描述】:

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 enums rust private-members


    【解决方案1】:

    在第一个示例中,枚举 List 是公开的。这意味着枚举变量More 也是公开的。但是,More 不能被外部代码使用,因为Node 不是公开的。因此,您有一个外部可见的东西,但实际上不能使用,这可能不是您想要的。

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

    【讨论】:

    • 澄清一下,你是说在rust公共代码不能访问外部私有代码,但私有代码可以访问外部私有代码?跨度>
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2022-01-22
    相关资源
    最近更新 更多