Rust书中提到"使用结构而不是元组结构几乎总是更好".除了newtype模式之外,还有其他任何有未命名字段的优点吗?在我看来,newtype模式是具有元组结构的唯一有用的情况.
Pao*_*lla 40
它们彼此非常相似.
鉴于以下定义
struct TupleStruct(i32, i32);
struct NormalStruct {
a: i32,
b: i32,
}
Run Code Online (Sandbox Code Playgroud)
我们可以构造结构和元组结构的实例如下
let ts = TupleStruct(1, 2);
let ns = NormalStruct { a: 1, b: 2 };
// AFAIK, this shortcut to initialize the fields of a struct using the values of the fields
// of another struct can't be done using tuple structs.
let ns2 = NormalStruct { a: 5, ..ns };
Run Code Online (Sandbox Code Playgroud)
作业的工作原理如下
let TupleStruct(x, y) = ts;
println!("x: {}, y: {}", x, y);
let NormalStruct { a, b } = ns;
println!("a: {}, b: {}", a, b);
Run Code Online (Sandbox Code Playgroud)
一个元组结构的领域有隐名(0,1,...).因此,访问字段如下执行
println!("Accessing ns by name - {}{}", ns.a, ns.b);
println!("accessing ts by name - {}{}", ts.0, ts.1);
Run Code Online (Sandbox Code Playgroud)
至少出于文档目的,将明确的名称分配给结构的字段几乎总是更清楚.这就是为什么在Rust社区我见过很多人争论总是使用普通结构.
但是,可能存在这样的情况:结构的字段本质上是"匿名的",一个值得注意的情况是"newtype"(具有一个字段的元组结构),其中您只包装内部类型.
在这种情况下,命名内部字段并不能提供任何其他信息.
struct Inches {
inner: i32,
}
Run Code Online (Sandbox Code Playgroud)
VS
struct Inches(i32);
Run Code Online (Sandbox Code Playgroud)
关于Rust书籍结构的部分有关于newtypes的更多信息.
| 归档时间: |
|
| 查看次数: |
8415 次 |
| 最近记录: |