一、函數修改器 modifier
在 solidity 中有一個函數修改器可作為前置、中置或者后置方法,有點像 ASP.NET 中的母版頁(最起碼差不多十年不碰了,不懂還有沒有這個概念),又有點像 ThinkPHP 中的前置方法,可以在指定某個函數調用前、中執行該函數,下面是一個示例:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{modifier checkAge(uint val){require(val<10,"Age < 10");_;}modifier checkHeight(uint val){require(val>260,"Height < 260");_;}function osVal(uint age,uint height) external pure checkAge(age) checkHeight(height){age+=1;}
}
以上代碼中使用 modifier 創建了函數修改器,modifier 之后是對應的函數修改器名稱,可以接收參數或者不接收參數,其中的 “_;
” 表示使用這個修改器的函數代碼位置,例如:
modifier checkHeight(uint val){require(val>260,"Height < 260");_;}
在被 osVal 方法調用后,osVal 方法中代碼的位置就等于在“_;”
位置進行填充。在 osVal 中使用這些修改器只需要再其后說明即可,并且可以傳入對應的參數,調用后效果如下:
“三明治”用法:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{uint public age=0;modifier sandwich(){age+=1;_;age+=1;}function osVal() external sandwich(){age+=1;}
}
三明治用法就是用于中間: