rust - 元组结构有哪些用例?

标签 rust

Rust的书提到“使用结构几乎总是比使用元组结构更好”。除了新类型模式以外,拥有未命名字段还有其他优点吗?在我看来,新类型模式是具有元组结构的唯一有用的情况。

最佳答案

它们彼此非常相似。

鉴于以下definitions

struct TupleStruct(i32, i32);
struct NormalStruct {
    a: i32,
    b: i32,
}

我们可以如下构造struct和tuple struct的实例
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社区中,我已经看到很多人主张始终使用普通结构。

但是,在某些情况下,该结构的字段本质上是“匿名的”,一种值得注意的情况是“newtype”(具有一个字段的元组结构),其中您只包装了一个内部类型。

在这种情况下,命名内部字段可能不会提供任何其他信息。
struct Inches {
    inner: i32,
}


struct Inches(i32);

section on structs on the Rust book具有有关新类型的更多信息。

关于rust - 元组结构有哪些用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65155318/

相关文章:

Rust 类型不匹配但前提是我不使用类型注释

rust - 如何在 Rust 中组合 splitn 和 split_whitespace?

rust - 如何将结构设为非公开且不将其从 lib.rs 中移出?

random - 如何将变异循环转换为功能样式?

rust - 如何在 Rust 中实现静态缓存?

enums - Rust proc_macro_derive(带有syn crate)生成用于匹配的枚举变量

rust - 有没有办法做unwrap_or_return一个错误(任何错误)

enums - 为特定变体派生特征

rust - #[automatically_derived] 是什么意思?

rust - 如何解析 actix-web 中的查询字符串?