作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在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/
我是一名优秀的程序员,十分优秀!