91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

合作市| 中超| 广宗县| 年辖:市辖区| 仁布县| 双江| 瓮安县| 耒阳市| 岳阳市| 临泽县| 华宁县| 廊坊市| 孟州市| 康乐县| 宿迁市| 新津县| 教育| 莎车县| 阿鲁科尔沁旗| 连云港市| 海南省| 英超| 河西区| 榆社县| 秀山| 昂仁县| 镇雄县| 马关县| 红安县| 大田县| 杭锦旗| 独山县| 京山县| 深泽县| 色达县| 大冶市| 同江市| 贵南县| 南阳市| 西昌市| 财经|