Rust书中提到,“使用struct结构体通常比使用tuple struct元组结构体更好。”除了newtype模式之外,是否还有其他未命名字段的优点?在我看来,newtype模式似乎是唯一有用的元组结构体案例。
Rust书中提到,“使用struct结构体通常比使用tuple struct元组结构体更好。”除了newtype模式之外,是否还有其他未命名字段的优点?在我看来,newtype模式似乎是唯一有用的元组结构体案例。
它们非常相似。
考虑以下定义
struct TupleStruct(i32, i32);
struct NormalStruct {
a: i32,
b: i32,
}
我们可以按照以下方式构造结构体和元组结构体的实例
let ts = TupleStruct(1, 2);
let ns = NormalStruct { a: 1, b: 2 };
// shortcut to initialize the fields of a struct using the values of the
// fields of another struct
let ns2 = NormalStruct { a: 5, ..ns };
let ts2 = TupleStruct { 0: 1, ..ts }; // for TupleStruct it needs curly brackets
// and implicit field names
作业的工作方式如下
let TupleStruct(x, y) = ts;
println!("x: {}, y: {}", x, y);
let NormalStruct { a, b } = ns;
println!("a: {}, b: {}", a, b);
元组结构体的字段具有隐式名称(0、1、...)。因此,访问字段的方式如下:
一个元组结构体的字段具有隐式名称(0、1、...)。因此,访问字段的方式如下
println!("Accessing ns by name - {}{}", ns.a, ns.b);
println!("accessing ts by name - {}{}", ts.0, ts.1);
至少在文档记录方面,为结构体的字段指定明确的名称几乎总是更清晰的。这就是为什么在Rust社区中,我见过许多人主张始终使用普通结构体的原因。
然而,在结构体的字段本质上是“匿名”的情况下,可能会有一些特例,其中一个显著的例子是“newtype”(只有一个字段的元组结构体),在这种情况下,命名内部字段无疑不提供任何其他信息。
struct Inches {
inner: i32,
}
对抗
struct Inches(i32);
Rust书上关于structs的章节有更多关于newtypes的信息。
type Args = (i32, i32)
和 struct Args(i32, i32)
,你更喜欢哪个? - Helin Wangtype
关键字可以定义一个别名(为相同的东西创建另一个名称),并且您可以在任何需要使用另一个名称的地方使用它。请参见 playground。 - Paolo Falabella