Note
返回多種變量,命名式返回,以及利用解構式賦值讀取全部或部分返回值
// 返回多个變量
function returnMultiple() public pure returns(uint256, bool, uint256[3] memory){
return(1, true, [uint256(1),2,5]);
}跟在函數後面,用於聲明返回的變量類型以及變量名
位在函數裡面,用於返回指定的變量
可以直接在 returns 中聲明返回變量的名稱。
Solidity 會初始化這些量,並且自動返回函數的值,無需再使用 return 。
當然還是可以命名式返回中用 return 来返回變量。
舉例:
// 命名式返回
function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
_number = 2;
_bool = false;
_array = [uint256(3),2,1];
}也可以改寫成以下:
// 命名式返回,依然支持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;
bool _bool2;
// 讀取所有返回值
(_number, _bool, _array) = returnNamed();
// 讀取部分返回值
(, _bool2, ) = returnNamed();-
Q:
returns關鍵字的作用?
A: 加在函數後面,用於聲明返回的變量類型以及變量名 -
Q:
return關鍵字的作用?
A: 用於函數主體中,返回指定的變量 -
Q: 採用命名式返回的函數主體中能否使用
return?
A: 能 -
Q: 解構式賦值能否只讀取函数部分返回值?
A: 能 -
Q: 假设存在如下函数那么它可能的返回结果是?
function returnNamed() public pure returns(uint256 , bool , string, uint256[3] memory)
A:
return (64, true, "abcd", [1, 2, 3]) -
Q: 下列属于命名式返回的是?
A:function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array) -
Q: 假設存在如下函數,那麼調用該函數返回結果是?
function returnNamed() public pure returns(uint256 _number){ bool _bool = true; string memory _str = '0xAA'; _number = 2; }
A: uint256: _number 2
-
Q: 假設存在如下函數,那麼下面哪個選項正確使用了該函數?
function returnMultiple() public pure returns(uint256, bool, uint256[3] memory){ return(1, true, [1,2,5]); }
A:
bool _bool; (,_bool,) = returnMultiple();