|
|
@ -1,8 +1,8 @@
|
|
|
|
# 元组
|
|
|
|
# 元组
|
|
|
|
|
|
|
|
|
|
|
|
元组是由多种类型组合到一起形成的,因此它是复合类型,元组的长度是固定的。
|
|
|
|
元组是由多种类型组合到一起形成的,因此它是复合类型,元组的长度是固定的,元组中元素的顺序也是固定的。
|
|
|
|
|
|
|
|
|
|
|
|
通过以下语法可以创建一个元组:
|
|
|
|
可以通过以下语法创建一个元组:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
fn main() {
|
|
|
|
fn main() {
|
|
|
|
let tup: (i32, f64, u8) = (500, 6.4, 1);
|
|
|
|
let tup: (i32, f64, u8) = (500, 6.4, 1);
|
|
|
@ -25,11 +25,11 @@ fn main() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
上述代码首先创建一个元组,然后将其绑定到`tup`上,接着使用`let (x, y, z) = tup;`来完成一次模式匹配,因为元组是`(n1,n2,n3)`形式的,因此我们用一模一样的`(x,y,z)`形式来进行匹配,然后把元组中对应的值绑定到变量`x`,`y`,`z`上,这就是解构:用同样的形式把一个复杂对象中的值匹配出来。
|
|
|
|
上述代码首先创建一个元组,然后将其绑定到`tup`上,接着使用`let (x, y, z) = tup;`来完成一次模式匹配,因为元组是`(n1,n2,n3)`形式的,因此我们用一模一样的`(x,y,z)`形式来进行匹配,元组中对应的值会绑定到变量`x`,`y`,`z`上。这就是解构:用同样的形式把一个复杂对象中的值匹配出来。
|
|
|
|
|
|
|
|
|
|
|
|
### 用`.`来访问元组
|
|
|
|
### 用`.`来访问元组
|
|
|
|
|
|
|
|
|
|
|
|
模式匹配可以让我们一次性把元组中的值全部或者部分获取出来,如果想要访问某个特定元素,那模式匹配就略显繁琐,对此,Rust提供了`.`的访问方式:
|
|
|
|
模式匹配可以让我们一次性把元组中的值全部或者部分获取出来,如果只想要访问某个特定元素,那模式匹配就略显繁琐,对此,Rust提供了`.`的访问方式:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
fn main() {
|
|
|
|
fn main() {
|
|
|
|
let x: (i32, f64, u8) = (500, 6.4, 1);
|
|
|
|
let x: (i32, f64, u8) = (500, 6.4, 1);
|
|
|
@ -64,6 +64,6 @@ fn calculate_length(s: String) -> (String, usize) {
|
|
|
|
|
|
|
|
|
|
|
|
`calculate_length`函数接收`s1`字符串的所有权,然后计算字符串的长度,接着把字符串所有权和字符串长度再返回给`s2`和`len`变量。
|
|
|
|
`calculate_length`函数接收`s1`字符串的所有权,然后计算字符串的长度,接着把字符串所有权和字符串长度再返回给`s2`和`len`变量。
|
|
|
|
|
|
|
|
|
|
|
|
对于其他语言,元组可以用来声明一个3D点,例如`Point(10,20,30)`,虽然使用Rust元组也可以做到:`(10,20,30)`,但是这样写有个非常重大的缺陷:
|
|
|
|
在其他语言中,可以用结构体来声明一个三维空间中的点,例如`Point(10,20,30)`,虽然使用Rust元组也可以做到:`(10,20,30)`,但是这样写有个非常重大的缺陷:
|
|
|
|
|
|
|
|
|
|
|
|
**不具备任何清晰的含义**,在下一章节中,会提到一种`元组结构体`,可以解决这个问题。
|
|
|
|
**不具备任何清晰的含义**,在下一章节中,会提到一种与元组类似的结构体,`元组结构体`,可以解决这个问题。
|
|
|
|