元组是任意数量的不同类型值的集合。当函数必须返回多个结果时,它们有时很有用。
在本文中,我们将深入研究 Rust 中的元组,特别是 Ruststruct的差异。
目录:
Rust 元组概述
结构和元组结构结构体元组结构
比较元组、structs 和元组structs实施差异用例
Rust 元组概述
Rust 的文档将元组定义为值的“有限异构序列”:
“有限”意味着它们具有固定长度——也就是说,如何在 Windows PC 上转换和打开页面文件:6 种最佳方法它们可以存储的值的数量是固定的。在计算机科学中,元组的长度也称为“元数”;具有不同元数的元组形成不同的类型
“异构”意味着元组的元素可能具有不同的类型
“序列”意味着我们使用它们的索引访问元组中的元素。如何减少 Windows 11 中的 Zoom CPU 使用率换句话说,元组的元素没有名字
我们可以简单地通过在括号内编写一个逗号分隔的值列表来创建一个元组,在 Windows 11 上打开计算机管理的 8 种快速方法可选择指定类型:
fn main() {
let immutable: (String, u8) = (String::from("LogRocket"), 120);
println!("{} {}", immutable.0, immutable.1);
}
在上面的示例中,如何在 Windows 11 中禁用网络适配器:5 种最佳方法我们创建了一个名为 的简单元组immutable,其中第一个值是 a String,第二个值是带位的无符号整数8。然后,我们通过索引访问元组的元素,从 开始0。运行时,示例打印“LogRocket 120”。
默认情况下,元组是不可变的。如何修复在 Windows 11 上显示白屏的 Windows 安全性例如,如果我们试图为上面元组的元素之一分配一个新值,我们会得到一个错误:
fn main() {
let immutable: (String, u8) = (String::from("LogRocket"), 120);
immutable.1 = 142; // cannot assign
}
要将元组定义为可变的,我们必须mut在声明时指定:
fn main() {
let mut mutable = (String::from("LogRocket"), 120);
mutable.1 = 142;
println!("{} {}", mutable.0, mutable.1);
}
在任何一种情况下,在 Word 文档中插入箭头的 4 种方法我们都可以破坏一个元组来初始化其他变量:
fn main() {
let mut mutable = (String::from("LogRocket"), 120);
let (name, value) = mutable;
println!("{name}");
}
上面的程序只会打印“LogRocket”。
最后,如何在 Windows 11 中重置 Windows 终端设置:4 种简单方法我们可以使用以下方法为元组类型分配别名type:
type Test = (String, u8);
fn main() {
let immutable: Test = (String::from("LogRocket"), 120);
println!("{} {}", immutable.0, immutable.1);
}
这使代码更具可读性。然而,重要的是要注意,如何修复记事本在 Windows 11 上无法打开我们定义的type只是一个别名。Test以上,在结构上是等价的。(String, u8)
结构和元组结构
在本节中,我们将介绍元组的两种替代方法,如何修复 Steam 必须运行才能在 Windows 11 上玩此游戏错误即structs 和元组structs。如果元组是具有匿名字段的匿名类型,struct则 s 是具有命名字段的命名类型。Tuplestruct处于范围的中间,如何全新安装 Windows 11:分步指南因为它们为我们提供了带有匿名字段的命名类型。
结构体
structs 类似于元组,如何在 Windows 11、10、8 或 7 上旋转屏幕因为它们可以处理不同类型的多个值。主要区别在于 a 的元素struct都有一个名称。因此,我们不是通过索引访问它们,而是通过名称访问它们:
struct Person {
name: String,
age: u8
}
fn main() {
let p = Person {
name: String::from("Jhon Doe"),
age: 21
};
println!("Name: {}, age: {}", p.name, p.age);
}
一般来说,能够命名 a 的元素struct使得后者更加灵活。如何在 Microsoft Word 中创建自定义颜色集和主题因此,为了可读性,通常最好使用元组struct而不是元组。尽管如此,这并不总是正确的,我们将在下一节中看到。
元组结构
元组structs 与 s 相同struct,在 Windows 10 和 11 中打开本地安全策略的 8 种方法唯一的区别是我们不必为它们的字段命名:
struct Wrapper(u8);
fn main() {
let w = Wrapper{0: 10};
println!("{}", w.0);
}
由于字段没有名称,我们必须通过索引访问它们。如何使用和自定义 Windows 11 快速设置在上面的示例中,我们定义 astruct来包装 a u8。然后,要读写它,我们必须使用它的索引来引用它0。
比较元组、structs 和元组structs
本节比较元组、structs 和元组structs。首先,如何在 Windows 11 上忘记网络:4 种最佳方法我们将看看一些关键的低级差异。然后,我们将看到它们每个的实际用例。
实施差异
由于 tuplestruct只是struct没有字段名称的 s,因此在本节中,我们将主要比较 tuple 和 tuple struct。我们将看到的有关元组 s 的内容也struct适用于s。struct事实上,元组structs 脱糖为常规structs。
首先,元组的元素struct默认是私有的,在 Windows 11 和 Windows 10 中打开任务计划程序的 12 种方法不能在定义它们的模块之外访问。此外,元组struct定义了一个类型。因此,struct具有相同类型字段的两个元组是两种不同的类型。
另一方面,元素类型相同的两个元组定义单一类型。如何在 Windows 11 笔记本电脑中启用或禁用节电模式换句话说,元组在结构上是等价的,而元组则struct不是。
其次,我们可以为 tuple 添加属性struct,例如#[must_use](在未使用值时发出警告)或#[derive(...)](自动实现 中的特征struct)。另一方面,元组不能有属性,但默认会实现一些特征。
第三,元组默认struct实现族,在 Windows 上禁用防火墙的 6 种简单方法允许它们像函数一样被调用或作为参数传递给高阶函数:Fn*
struct Name(String);
fn main() {
let strings = [String::from("Log"), String::from("Rocket")];
let names = strings.map(Name);
}
此外,元组struct支持结构更新语法,在 Windows 上将 PDF 文档插入 Excel 电子表格的 3 种方法简化了我们创建 a 的新实例的方式struct,其中大多数值等于相同的另一个实例struct:
struct Person(String, u8);
fn main() {
let john = Person {
0: String::from("John"),
1: 32
};
let another_john = Person {
1: 25,
..john
};
println!("name: {}, age: {}", another_john.0, another_john.1);
}
在上面的示例中,在 Windows 11 中启用本地安全机构 (LSA) 进程的 3 种方法我们首先创建了Person,的一个实例john,然后使用它创建了一个新实例,another_john,仅编辑了由 定义的字段的子集Person。
最后,我们可以在元组上定义方法struct,如何在 Windows 11 上禁用 Xbox Game Bar:4 种最佳方法而我们不能在元组上定义方法:
struct Person(String, u8);
impl Person {
fn is_adult(&self) -> bool {
return &self.1 >= &18;
}
}
fn main() {
let p = Person {
0: String::from("John"),
1: 20
};
println!("{}", p.is_adult());
}
用例
根据经验,struct只要类型名称带有语义信息,适用于 iOS 的 Google 地图:使用街景视图和转弯导航我们就应该使用元组。然后,iOS:如何离线使用 Google 地图和共享位置struct当有多个字段时,我们应该移动到 s。
尽管如此,在某些情况下,没有名称只是更具可读性。使用 Bitdrop 在 iPhone 和浏览器之间共享加密文件例如,as_chunks方法slice定义如下:
pub fn as_chunks<const N: usize>(&self) -> (&[[T; N]], &[T])
它基本上输入一个常量N,定义块的大小,如何在 Android 或 iPhone 上隐藏任何应用程序并返回一个元组,其中第一个元素是 size 块的数组N,而第二个元素是数组的其余部分(即最后一个值不够组成一个新的块)。
在这种情况下,类型本身清楚地表明结果的每个元素代表什么。因此,如何关闭 iPhone 和 iPad 上的深色模式:8 种简单方法拥有名字可能会过大。在这种情况下,元组是一个很好的解决方案。
尽管如此,我们通常会处理复杂的数据类型,拥有名称有助于我们阅读代码。例如,考虑一个处理书籍信息的程序,特别是书名、作者和价格。如何在 iPhone 上使用语音备忘录:完整指南如果我们用元组对其建模,我们可能会想出:
type Book = (String, String, f32)
Book然而,我们对 的定义包含两个String字段。什么是点击唤醒 iPhone 以及如何使用它我们怎么知道哪些代表标题,哪些代表作者?在这种情况下, astruct是更好的选择:
struct Book {
title: String,
author: String,
price: f32
}
struct不过,有时我们可能会发现自己只使用一个元素来处理s。我们可能想要这样做,例如,使用类型来进一步增强代码的清晰度。如何修复 iPhone Wi-Fi 不断断开连接的问题考虑一个从三个部分构建 URL 的函数:
子域名
域名
顶级域名
首先,我们可能会想出一个具有以下签名的函数:
fn make_url(
subdomain: String,
domain_name: String,
top_level_domain: String
) -> String {
todo!();
}
fn main() {
make_url(
String::from("www"),
String::from("mydomain"),
String::from("com")
);
}
不过,这里的单个结构中仍然有很多Strings,如何在 Google 地图中查看和管理您的位置记录而且很容易混淆参数的顺序。此外,Rust 不支持命名参数,因此我们必须记住正确的顺序。
使用 tuple structs,我们可以编写一个更不言自明的签名:
struct Subdomain(String);
struct DomainName(String);
struct TopLevelDomain(String);
struct URL(String);
fn make_url(
subdomain: Subdomain,
domain_name: DomainName,
top_level_domain: TopLevelDomain
) -> URL {
todo!();
}
fn main() {
make_url(
Subdomain(String::from("www")),
DomainName(String::from("mydomain")),
TopLevelDomain(String::from("com"))
);
}
在上面的示例中,我们利用 tuple structs 来包装Strings。如何使用 iPhone 热点在这种情况下,命名每个 的字段是没有意义的struct。事实上,它会使代码更难阅读。
结论
在这篇文章中,我们深入研究了 Rust 中的元组。首先,我们简要了解了它们是什么以及如何使用它们。其次如何更改 iPhone 的触摸灵敏度设置,我们简要介绍了可能的替代方案,即structs 和 tuple structs。最后,我们通过查看低级实现细节以及每个选项的实际用例来比较所有这些选项。
最后,它们可用于完成更多相同的用例。与往常一样,选择中真正重要的是它们如何影响代码的可读性和可维护性。