gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:47:38 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com