Move 不完全支持 Tuple。但是,為了支持多個返回值,Move 具有類似 Tuple 的表達式。這些表達式在運行時不會產生具體的值,因此它們非常有限:它們只能出現在表達式中(通常在函數的返回位置);不能綁定到局部變量;不能存儲在 struct 中;Tuple 類型不能用於實例化泛型。
同樣,Unit 是 Move 源語言創建的一種類型,以便基於表達式。Unit 不會產生任何運行時值。我們可以認為 Unit 是一個空 Tuple,任何適用於 Tuple 的限制也適用於 Unit。
(): () // 空的 Tuple, 也稱為 Tuple
(e1, e2, ..., en): (T1, T2, ..., Tn) // n 個 element 的 Tuple
address 0x42 {
module Example {
fun returns_3_values(): (u64, bool, address) {
(0, false, @0x42)
}
fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) {
(x, 0, 1, b"foobar")
}
}
}
可以對 Tuple 操作的動作只有解構,可以透過 let 綁定或賦值中被解構
address 0x42 {
module Example {
// all 3 of these functions are equivalent
fun returns_unit() {}
fun returns_2_values(): (bool, bool) { (true, false) }
fun returns_4_values(x: &u64): (&u64, u8, u128, vector<u8>) { (x, 0, 1, b"foobar") }
fun examples(cond: bool) {
let () = ();
let (x, y): (u8, u64) = (0, 1);
(x, y) = if (cond) (1, 2) else (3, 4);
}
fun examples_with_function_calls() {
let () = returns_unit();
let (x, y): (bool, bool) = returns_2_values();
() = returns_unit();
(x, y) = returns_2_values();
}
}
}
讓我們 Move to Day9