元组结构有哪些用例?
What are some use cases for tuple structs?
Rust 书提到 "it is almost always better to use a struct than a tuple struct." 除了 newtype 模式之外,拥有未命名字段还有其他优势吗?在我看来,newtype 模式是具有元组结构的唯一有用的情况。
他们彼此非常相似。
给出以下 definitions
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、...)。因此,访问字段执行如下
println!("Accessing ns by name - {}{}", ns.a, ns.b);
println!("accessing ts by name - {}{}", ts.0, ts.1);
至少出于文档目的,为结构的字段指定显式名称几乎总是更清楚。这就是为什么在 Rust 社区中我看到许多人主张始终使用普通结构。
但是,在某些情况下,结构的字段本身可能是 "anonymous",一个值得注意的情况是 "newtype"(具有一个字段的元组结构),其中您只包装了一个内部类型。
在这种情况下,命名内部字段并不能提供任何额外信息。
struct Inches {
inner: i32,
}
对
struct Inches(i32);
section on structs on the Rust book 有更多关于新类型的信息。
Rust 书提到 "it is almost always better to use a struct than a tuple struct." 除了 newtype 模式之外,拥有未命名字段还有其他优势吗?在我看来,newtype 模式是具有元组结构的唯一有用的情况。
他们彼此非常相似。
给出以下 definitions
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、...)。因此,访问字段执行如下
println!("Accessing ns by name - {}{}", ns.a, ns.b);
println!("accessing ts by name - {}{}", ts.0, ts.1);
至少出于文档目的,为结构的字段指定显式名称几乎总是更清楚。这就是为什么在 Rust 社区中我看到许多人主张始终使用普通结构。
但是,在某些情况下,结构的字段本身可能是 "anonymous",一个值得注意的情况是 "newtype"(具有一个字段的元组结构),其中您只包装了一个内部类型。
在这种情况下,命名内部字段并不能提供任何额外信息。
struct Inches {
inner: i32,
}
对
struct Inches(i32);
section on structs on the Rust book 有更多关于新类型的信息。