Skip to content

Latest commit

 

History

History
189 lines (151 loc) · 14.1 KB

File metadata and controls

189 lines (151 loc) · 14.1 KB

WTF Solidity 極簡入門:4. 函數輸出

重點內容

Note

返回多種變量,命名式返回,以及利用解構式賦值讀取全部或部分返回值

隨筆

返回值:return 和 returns

    // 返回多个變量
    function returnMultiple() public pure returns(uint256, bool, uint256[3] memory){
        return(1, true, [uint256(1),2,5]);
    }

return

跟在函數後面,用於聲明返回的變量類型以及變量名

returns

位在函數裡面,用於返回指定的變量

命名式返回

可以直接在 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();

題目練習

  1. Q: returns 關鍵字的作用?
    A: 加在函數後面,用於聲明返回的變量類型以及變量名

  2. Q: return 關鍵字的作用?
    A: 用於函數主體中,返回指定的變量

  3. Q: 採用命名式返回的函數主體中能否使用 return
    A:

  4. Q: 解構式賦值能否只讀取函数部分返回值?
    A:

  5. Q: 假设存在如下函数那么它可能的返回结果是?

        function returnNamed() public pure returns(uint256 , bool , string, uint256[3] memory)

    A: return (64, true, "abcd", [1, 2, 3])

  6. Q: 下列属于命名式返回的是?
    A: function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array)

  7. Q: 假設存在如下函數,那麼調用該函數返回結果是?

         function returnNamed() public pure returns(uint256 _number){
             bool _bool = true;
             string memory _str = '0xAA';       
             _number = 2;
         }

    A: uint256: _number 2

  8. Q: 假設存在如下函數,那麼下面哪個選項正確使用了該函數?

         function returnMultiple() public pure returns(uint256, bool, uint256[3] memory){
             return(1, true, [1,2,5]);
         }

    A: bool _bool; (,_bool,) = returnMultiple();