tuple类型
Rust的tuple类型可以存放0个、1个或多个任意数据类型的数据。使用tup.N的方式可以访问索引为N的元素。
#![allow(unused)]
fn main() {
let n = (11, 22, 33);
println!("{}", n.0); // 11
println!("{}", n.1); // 22
println!("{}", n.2); // 33
}
注意,访问tuple元素的索引必须是编译期间就能确定的数值,而不能是变量。
#![allow(unused)]
fn main() {
let n = (11, 22, 33);
let a: usize = 2;
println!("{}", n.a); // 错误
}
实际上,n.a会被Rust解析为对Struct类型的变量n的a字段的访问。
tuple通常用来作为简单的数据组合体。
例如:
fn main(){
// 表示一个人的name和age
let p_name = "junmajinlong";
let p_age = 23;
println!("{}, {}", p_name, p_age);
// 与其将有关联的数据分开保存到多个变量中,
// 不如保存在一个结构中
let p = ("junmajinlong", 23); // 同时存放&str和i32类型的数据
println!("{}, {}", p.0, p.1);
}
Rust中经常会将tuple类型的各元素赋值给各变量,方式如下:
fn main(){
let p = ("junmajinlong", 23);
// 也可以类型推导:let (name,age) = p;
let (name, age): (&str, i32) = p;
// 比 let name = p.0; let age = p.1; 更简洁
println!("{}, {}", name, age);
}
有时候tuple里只会保存一个元素,此时必须不能省略最后的逗号:
#![allow(unused)]
fn main() {
let p = ("junmajinlong",);
}
unit类型
不保存任何数据的tuple表示为()。在Rust中,它是特殊的,它有自己的类型:unit。
unit类型的写法为(),该类型也只有一个值,写法仍然是()。参考下面的写法应该能搞清楚。
#![allow(unused)]
fn main() {
// 将值()保存到类型为()的变量x中
// 类型 值
let x: () = ();
}
unit类型通常用在那些不关心返回值的函数中。在其他语言中,那些不写return语句或return不指定返回内容的的函数,一般表示不关心返回值。在Rust中可将这种需求写为return ()。