Solidity内置支持元组(tuple),也就是说支持一个可能的完全不同类型组成的一个列表,数量上是固定的(Tuple一般指两个,还有个Triple一般指三个)。
这种内置结构可以同时返回多个结果,也可用于同时赋值给多个变量。
一、什么是元组?
contract C {
mapping(uint => string) public students;
function C(){
students[0] = "melody";
students[1] = "luoxue";
}
function studentsNames() constant returns(string name0,string name1) {
name0 = students[0];
name1 = students[1];
}
function studentsNames1() constant returns(string name0,string name1){
name0 = students[0];
name1 = students[1];
return(name0,name1);// 元组,这里只用来举例,实际上可以省略,同上
}
// 元素是不同类型的元组
function f() constant returns(uint,bool,string){
return(101,true,"melody");
}
}
二、元组的使用
pragma solidity ^0.4.0;
contract C {
uint[] data;
function f() returns (uint, bool, uint) {
// 返回一个元组
return (7, true, 2);
}
function g() {
// 声明并赋值一些变量,但这里没法直接定义变量的类型
var (x, b, y) = f();
// 给变量赋值
(x, y) = (2, 7);
// 交换变量值
(x, y) = (y, x);
// 元素可以省略,在声明和赋值时都可以使用
(data.length,) = f(); // Sets the length to 7
(,data[3]) = f(); // Sets data[3] to 2
// (1,) 是唯一定义 1-component 元组的方法, 因为 (1) 是等价于 1 的.
(x,) = (1,);
}
}