除了编程语言提供的初始化赋值对多个变量初始化,连续赋值同时初始化多个相同变量。这些基本的初始化类似于:
- int a = 1, b = 2;
- a = b = 1;
C/ObjC/C++/VB/Java都支持如上基本的多变量统一初始化方式。
除了上面,还有一些更舒适的初始化方式:多变量分别初始化方式。
- Swift和Rust提供tuple对多个变量初始化
例如let (x, y) = (1, 2)会将x赋值为1,y赋值为2. - Go语言提供形如 x, y := 1, 2 初始化x和y两个变量,也可以实现两个变量的快速交换,如 a, b = b, a
- Python可以直接用下面完成3个变量初始化:a, b, c = 1, 2, 3
- C# 7.0引入解构赋值,类似tuple的多变量初始化也可以轻松完成:
(int x, int y) = (10, 20);
(x, y) = (1, 2); - JS也提供解构赋值初始化多个变量,如下示例的x, y, z可以单独使用。
let { x, y, z } = { x: 1, y: 2, z: 3 }; - C++虽然提供tuple元组,但初始化方式并不像下面提到的方便。
不同类型的多变量初始化
有的时候,我们想要在一行代码中初始化两个不同类型的变量:int a = 1, double b = 3.14; 如果是类型放在变量前面的编程语言一般都不能支持,但类型放在类型后面的编程语言却很容易支持。
- C/ObjC/C++/Java/C# 均不能支持这种行为。
- Swift 可以实现:let a: Int = 1, b: Double = 3.14
- Go语言支持多个不同类型变量初始化,需要放在括号里面
var (
name string = "alex"
age int = 28
)
多个变量初始化只用部分
- 尽管类似Go语言提供多个变量同时初始化,但有时又不想多个变量都要用,只想用关心的。Go语言提供空白标识符"_"来隐藏变量,此变量又被称为匿名变量,不过不能输出匿名变量。
例如只想获取HTTP的status:
status, _ = 200, "HTTP request is OK"