Solidity极简入门: 4. 函数输出 return
Time:
Best Score:
我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲
所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity
这一讲,我们将介绍Solidity
函数输出,包括:返回多种变量,命名式返回,以及利用解构式赋值读取全部和部分返回值。
返回值 return和returns
Solidity
有两个关键字与函数输出相关:return
和returns
,他们的区别在于:
returns
加在函数名后面,用于声明返回的变量类型及变量名;return
用于函数主体中,返回指定的变量。
// 返回多个变量
function returnMultiple() public pure returns(uint256, bool, uint256[3] memory){
return(1, true, [uint256(1),2,5]);
}
上面这段代码中,我们声明了returnMultiple()
函数将有多个输出:returns(uint256, bool, uint256[3] memory)
,接着我们在函数主体中用return(1, true, [uint256(1),2,5])
确定了返回值。
命名式返回
我们可以在returns
中标明返回变量的名称,这样solidity
会自动给这些变量初始化,并且自动返回这些函数的值,不需要加return
。
// 命名式返回
function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
_number = 2;
_bool = false;
_array = [uint256(3),2,1];
}
在上面的代码中,我们用returns(uint256 _number, bool _bool, uint256[3] memory _array)
声明了返回变量类型以及变量名。这样,我们在主体中只需要给变量_number
,_bool
和_array
赋值就可以自动返回了。
当然,你也可以在命名式返回中用return
来返回变量:
// 命名式返回,依然支持return
function returnNamed2() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
return(1, true, [uint256(1),2,5]);
}
解构式赋值
solidity
使用解构式赋值的规则,支持读取函数的全部或部分返回值。
- 读取所有返回值:声明变量,并且将要赋值的变量用
,
隔开,按顺序排列。
uint256 _number;
bool _bool;
uint256[3] memory _array;
(_number, _bool, _array) = returnNamed();
- 读取部分返回值:声明要读取的返回值对应的变量,不读取的留空。下面这段代码中,我们只读取
_bool
,而不读取返回的_number
和_array
:
(, _bool2, ) = returnNamed();
在remix上验证
- 部署合约后查看三种返回方式的结果
总结
这一讲,我们介绍函数的返回值return
和returns
,包括:返回多种变量,命名式返回,以及利用解构式赋值读取全部和部分返回值。