溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

solidity智能合約[27]-函數(shù)與函數(shù)重載

發(fā)布時(shí)間:2020-07-19 15:32:20 來(lái)源:網(wǎng)絡(luò) 閱讀:432 作者:jonson_jackson 欄目:開(kāi)發(fā)技術(shù)

函數(shù)的一般形式

1
function (<parameter types>) {public|internal|external} [pure|constant|view|payable] [returns (<return types>)]

函數(shù)的作用

1、與區(qū)塊鏈交互
2、本地執(zhí)行
3、封裝代碼

帶參數(shù)函數(shù)

1
2
3
4
5
6
7
uint public num;
string public name;

function setparam(uint _num,string _name) public {
    num  = _num;
    name = _name;
}

帶參函數(shù)調(diào)用—函數(shù)命名參數(shù)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
pragma solidity ^0.4.23;


contract funcParam{

   //狀態(tài)變量
   uint public num;
   string public name;
   //代餐函數(shù)
   function setparam(uint _num,string _name) public {
       num  = _num;
       name = _name;
   }

   //調(diào)用
   function Test() public {
       setparam(99,"bob");
   }

   //函數(shù)命名參數(shù)
     function Test2() public {
       setparam({_num:99,_name:"bob"});
   }

     function Test3() public {
       setparam({_name:"Alice",_num:999});
   }

   //錯(cuò)誤代碼,參數(shù)個(gè)數(shù)不匹配
   // function Test4() public {
   //     setparam(100);
   // }

}

函數(shù)重載

在一個(gè)合約中有相同名字的函數(shù),就是函數(shù)的重載。
重載必須要函數(shù)的類(lèi)型與長(zhǎng)度都不相同。

下面的例子都是錯(cuò)誤的寫(xiě)法

錯(cuò)誤1

1
2
3
4
5
6
7
function  fun(){

}

function  fun(){

}

錯(cuò)誤2

1
2
3
4
5
6
7
function  fun() returns(uint){

}

 function  fun() returns(bytes1){

}

錯(cuò)誤3

1
2
3
4
5
6
7
  function  fun() returns(uint){

}

function  fun(){

}

正確1

1
2
3
4
5
6
7
function  fun(uint k) public pure{

}

function  fun() public pure{

}

正確2

1
2
3
4
5
6
7
function  fun2(uint a) public pure{

}

function  fun2(bytes1 b) public pure{

}

例子剖析1

在下面的例子中,fun3有兩個(gè)重載的函數(shù)。函數(shù)test不能夠調(diào)用fun3(2),因?yàn)椴荒軌蛎鞔_到底是要調(diào)用哪一個(gè)。
fun3(256)能夠執(zhí)行成功。因?yàn)?56超過(guò)了int8的最大值,只能夠調(diào)用fun3(uint a). 如果想明確,可以強(qiáng)制的轉(zhuǎn)換,例如uint256(2)。

1
2
3
4
5
6
7
8
9
10
11
12
13
function  fun3(uint a) public {
 num = 256;
}

function  fun3(uint8 b) public{
  num = 8;
}

function test() public{
 //fun3(2);錯(cuò)誤,不明確
 fun3(256);
   fun3(uint256(2));
}
  • 本文鏈接: https://dreamerjonson.com/2018/11/21/solidity-27-function-overload/

  • 版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協(xié)議 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明出處!

solidity智能合約[27]-函數(shù)與函數(shù)重載

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI