Solidity中修饰器内的_;能否被其他代码包裹?
Solidity修饰器中占位符
_;能否被其他代码包围? 可以,Solidity修饰器中的占位符_;完全可以被其他代码包围,它的作用是指代被修饰函数的全部代码逻辑,修饰器中_;前后的代码会分别在函数执行前、执行后运行。
以你给出的示例为例:
modifier foo { require(msg.value > 100, "Boo"); _; globVar = 1010; }
当被这个修饰器修饰的函数被调用时,执行顺序是:
- 先执行
require(msg.value > 100, "Boo");,验证msg.value是否大于100,不满足则回滚交易 - 执行被修饰函数的全部代码(
_;的位置会被替换为目标函数的代码) - 最后执行
globVar = 1010;,完成全局变量的赋值
这种写法非常实用,常用于实现函数执行前后的权限校验、状态检查、日志记录或状态更新等逻辑。
内容的提问来源于stack exchange,提问作者Nikola Cekić
相关产品推荐
相关产品推荐

