1 modifier
Solidity 中关键字 modifier 用于声明一个函数修改器。函数修改器的作用与 Spring 中的切面功能很相似,当它作用于一个函数上,可以在函数执行前或后(依赖于具体实现)预先执行modifier中的逻辑,以增强其功能。
官方文档:modifier可以改变函数的行为。可以被继承和重写;
执行函数时有时候也会对函数的参数有所要求,为了让函数内的代码更简洁我们便可以写在modifier中;
一个函数可能需要做多个检查,那么我们可以写多个modifier,调用时只需将每个modifier以空格隔开,检查顺序也就是modifier们的排列顺序;
2 _ 的作用
函数修改器中有一行代码只有下划线 _ ,在实际执行中,我们可以将被修饰函数的代码视为下划线处的代码。即,下划线实际上帮我们标记了被modifier修饰函数的执行位置。
pragma solidity ^0.8.7;
contract FunctionModifier{
bool public paused;
uint public count;
function setPause(bool _paused) external {
paused = _paused;
}
modifier whenNotPaused() {
require(!paused,"paused");
_;
}
function inc() external whenNotPaused {
count += 1;
}
function dec() external whenNotPaused {
count -= 1;
}
modifier cap(uint _x){
require(_x < 100, "x >= 100");
_;
}
function incBy(uint _x) external whenNotPaused cap(_x) {
count += _x;
}
modifier sandwich() {
//code here
count += 10;
_;
//morec ode here
count *=2;
}
function foo() external sandwich {
count += 1;
}
}
Solidity modifier 功能可以将一些通用的操作提取出来,提高编码效率,降低代码耦合性;