struct - 为什么 "can' t 泄漏私有(private)类型“仅适用于结构而不适用于枚举?

标签 struct enums rust private-members

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/

相关文章:

ruby-on-rails - rails formtastic - 以枚举为下拉列表的整数字段 - '0' 无效

testing - 如何在不要求参数函数可变的情况下测试元函数?

rust - 什么是导致段错误的 Rust 代码示例?

C++ STL 列出两个结构交叉引用

java - 枚举类型中的方法可以更改枚举实例的状态吗?

asynchronous - Rust 解构枚举受 std::sync::RwLock 保护,返回引用

rust - 使用状态机模式时解决 Rust 所有权问题

c++ - 指针数组分配的段错误?

c - 在 C 中分配数组和结构

c++ - 指向具有自定义结构的指针的指针