15函数修改器

_;表示其他代码在哪里运行

basic

inputs:带参数的

sandwish:函数的其他代码夹在修改器中间

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract FunctionModifier{
    bool public  paused;
    uint public  count;

    function setPause(bool _paused) external {
        paused=_paused;
    }

    // basic
    modifier whenNotPaused(){
        require(!paused,"paused");
        _; //后面代码正常运行
    }
    function inc() external whenNotPaused{
        count+=1;
    }
    function dec() external whenNotPaused{
        count-=1;
    }

    // inputs带参数
    modifier cap(uint _x){
        require(_x<100,"error:x>100");
        _;
    }
    function incBy(uint _x) external whenNotPaused cap(_x){
        count+=_x;
    }

    // sandwich
    modifier sandwich(){
        count+=10;
        _;
        count*=2;
    }
    // count先+10,然后再+1;然后再乘以2
    function foo()external sandwich{
        count+=1;
    }
}