Solidity中函式返回值,靜態動態陣列

昏睡的云雪發表於2024-07-20
新建函式,並確定返回值
 function New1() public pure returns(uint,bool){
        return (98,true);
    }
    function New2() public pure returns (uint x,bool b){
        return(5,false);
    }
    function New3() public pure returns (uint x,bool b){  
        x=64;
        b=true;
    }

常規寫法如上,如果想透過一個函式返回值給另一個函式

//承接函式的多種寫法
    function New4() public pure  returns (uint x, bool b){
        ( x, b) = New1();
        //只返回一個資料
        //(uint x,) = New1(); 
        //(, bool b) = New1();   
    }
    function New4() public pure  returns (uint , bool){
        (uint x,bool b) = New1();
        return (x,b);  
    }
    function New4() public pure  returns (uint , bool){
        (,bool b) = New1();
        (uint x,) = New1();
        return (x,b);  
    }

如上如果想透過一個函式給另一個函式提供返回值則可以採取三種方法,但是要注意返回值的資料型別,兩個函式要保持一致。

對於靜動態陣列。

uint[] public nums1 = [1,2,3]; //動態陣列,長度可變
uint[3] public nums2 = [4,5,6];//定長陣列,長度不可變,且必須初始化所有元素

其中有些特殊的寫法,包括增刪。

function New1() public {
        nums1.push(4); //向陣列尾部新增資料
        x = nums1[1];  //賦值
        delete nums1[1]; //刪除原先資料,並填充為0 
        nums1.pop();  //將陣列的最後一位彈出
        k = nums1.length; //得出陣列長度

    } 

對於陣列的賦值,不同與其他語言的直接根據索引或者地址來對應賦值,Solidity中的陣列賦值首先要確定陣列長度,對於靜態陣列沒什麼好說的,長度一定不可修改,直接迴圈賦值就行。對於動態陣列,首先確定接收陣列的長度,例如先建立一個跟陣列new1相同型別的動態陣列new3,然後

 nums3 = new uint[](nums1.length);

如果想臨時建立陣列來賦值

uint[] memory result = new uint[](nums1.length);

用來確定長度,之後用“for”迴圈

for (uint i = 0; i < nums1.length; i++) {
            nums3[i] = nums1[i];
        }
或
 for (uint i = 0; i < nums1.length; i++) {
            result[i] = nums1[i];
        }

將動態陣列new1中的元素賦值給陣列new3和result

相關文章