中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

solidity智能合約[33]-modifire-deep

發布時間:2020-07-04 07:33:17 來源:網絡 閱讀:226 作者:jonson_jackson 欄目:開發技術

帶參modifire

modifire還可以帶參數,如下面的例子,模擬了游戲中的升級操作。如果玩家等級達到2級,就可以修改名字。如果玩家等級達到10級,就可以修改DNA。
通過帶參數的modifire實現對于代碼的封裝。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pragma solidity^0.4.23;

contract  modifiererParam{
   uint public level = 9;
   string public name;
   uint public DNA;

   modifier controlLevel(uint _needlevel){
       require(level>_needlevel);
       _;
   }

   //修改名字
   function changeName(string _name) public controlLevel(2){
       name = _name;
   }

   //修改DNA
     function changeDNA(uint _dna) public controlLevel(10){
       DNA = _dna;
   }
}

通過上面的例子,我們能夠看到帶參數的modifire的使用方法。首先在modifire中添加參數。接著在函數定義中,在修飾符與return返回值之間加上controlLevel(傳遞的參數).

例如,當調用changeName函數執行的語句為:

1
2
require(level>2);
name = _name;

例如,當調用changeDNA函數執行的語句為:

1
2
require(level>10);
name = _name;

多重modifire

函數可以有多個modifire,這種情況要相對復雜得多。
我們從下面的例子,來講解多重modifire的執行過程。

案例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
contract  mulmodifiererDeep{
   uint public a = 0;

   modifier mod1{
       a = 1;
       _;
       a = 2;
   }

   function test() public  mod1{

       a = 100;
   }

}

下面的例子中,當執行test方法后,狀態變量a的值會變為2. 我們提到過,modifire中的下劃線指代了函數中的所有語句。
所以執行流程為
a = 1 a = 100 a = 2

案例2

下面的例子中,使用了多重的modire。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
contract  mulmodifiererDeep2{
   uint public a = 0;

   modifier mod1{
       a = 1;
       _;
       a = 2;
   }

    modifier mod2{
       a = 3;
       _;
       a = 4;
   }

   function test() public  mod1 mod2{
       a = 100;
   }
}

在上面的例子中test函數使用了modifire:mod1、mod2
嵌套規則為,首先函數中的a = 100嵌套到mod2的_中。整個語句變為了
a = 3; a = 100; a = 4;
接下來,將上面的語句添加到mod1的下劃線中,所以整個執行語句變為了

1
2
3
4
5
a = 1;
a = 3;
a = 100;
a = 4;
a = 2;

最后執行結果為 a = 2。

案例3

多重modifire的順序非常的重要的。
下面的例子,和案例2相同但是修改了mod1與mod2在函數中的順序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
contract  mulmodifiererDeep2{
   uint public a = 0;

   modifier mod1{
       a = 1;
       _;
       a = 2;
   }

    modifier mod2{
       a = 3;
       _;
       a = 4;
   }

   function test() public  mod2 mod1{
       a = 100;
   }
}

在上面的例子中test函數使用了modifire:mod2、mod1
嵌套規則為,首先函數中的a = 100嵌套到mod1的_中。整個語句變為了
a = 1; a = 100; a = 2;
接下來,將上面的語句添加到mod1的下劃線中,所以整個執行語句變為了

1
2
3
4
5
a = 3;
a = 1;
a = 100;
a = 2;
a = 4;

最后執行結果為 a = 4。

  • 本文鏈接: https://dreamerjonson.com/2018/11/22/solidity-33-modifire-deep/

  • 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協議 許可協議。轉載請注明出處!

solidity智能合約[33]-modifire-deep

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九台市| 栖霞市| 巴林右旗| 和田市| 蓬溪县| 桃园县| 诸城市| 黎平县| 澄江县| 兴文县| 芦山县| 奉新县| 法库县| 两当县| 商河县| 藁城市| 固始县| 南京市| 饶平县| 滁州市| 隆子县| 阳曲县| 株洲市| 美姑县| 高清| 新民市| 福州市| 邵阳县| 徐水县| 喀喇沁旗| 甘南县| 通州区| 苏尼特左旗| 梁山县| 蛟河市| 酉阳| 贵州省| 灵宝市| 鄂尔多斯市| 武川县| 梓潼县|