2 Star 3 Fork 4

GKing/Solidity8_perfect

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
S_13_FunctionModifier.sol 2.00 KB
一键复制 编辑 原始数据 按行查看 历史
GKing 提交于 2022-11-05 11:12 . Function modifier 函数修改器
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
* Function modifier 函数修改器
* - reuse code before and / or after function
* Basic:基本用法
* inputs:带参数的用法
* sandwich:三明治用法
*/
contract FunctionModifier {
bool public paused;
uint public count;
function setPause(bool _paused) external {
paused = _paused;
}
// ------ 原始函数 ------
function inc() external {
require(!paused, "paused");
count += 1;
}
function dec() external {
require(!paused, "paused");
count -= 1;
}
// ------ end -------
// ------ 使用函数修改器 ------
// 把报错提取出来作为一个复用的函数修改器
modifier whenNotPaused() {
require(!paused, "paused");
// 下划线位置表示,调用函数的其他代码要在修改器的什么位置运行
_;
}
function incNew() external whenNotPaused {
count += 1;
}
function decNew() external whenNotPaused {
count -= 1;
}
// ------ end -------
// ----- inputs:带参数的函数修改器-原始函数 ------
function incBy(uint _x) external whenNotPaused {
require(_x < 100, "x >= 100");
count += _x;
}
// ------ end -------
// ----- inputs:带参数的函数修改器 ------
modifier cap(uint _x) {
// 在修改器中检查
require(_x < 100, "x >= 100");
_;
}
function incByNew(uint _x) external whenNotPaused cap(_x) {
count += _x;
}
// ------ end -------
// ------ sandwich ------
modifier sandwich() {
// code here
count += 10;
_;
// more code here
count *= 2;
}
// 代码运行顺序
// 0: 先运行sandwich修改器中 _ 以上的代码
// 1: 运行foo函数中的代码
// 2: 运行sandwich修改器中 _ 以下的代码
function foo() external sandwich {
count += 1;
}
// ------ end -------
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jacky2code/solidity8_perfect.git
[email protected]:jacky2code/solidity8_perfect.git
jacky2code
solidity8_perfect
Solidity8_perfect
master

搜索帮助