Solidity中修饰器内单下划线(_)的作用是什么?
Solidity修饰器中
_的作用(以OpenZeppelin Ownable的onlyOwner为例) 先看你提到的onlyOwner修饰器代码:
modifier onlyOwner() { require(isOwner()); _; }
这个单下划线_是Solidity修饰器的执行占位符,核心作用是标记「被修饰函数的代码要插入执行的位置」:
- 当被这个修饰器标记的函数(比如Ownable里的
transferOwnership)被调用时,会先执行修饰器里的require(isOwner()),校验调用者是不是合约所有者; - 校验通过后,才会执行
_所在位置的被修饰函数的全部代码; - 如果校验失败,
require会直接抛出错误,被修饰的函数代码根本不会触发执行。
它不是单纯的“必要组成部分”,还决定了修饰器逻辑和被修饰函数逻辑的执行顺序——你也可以把_放在修饰器逻辑前面,那就是先跑被修饰函数的代码,再执行修饰器的校验(不过这种场景极少,权限类修饰器基本都是先做校验)。
内容的提问来源于stack exchange,提问作者oleracea
相关产品推荐
相关产品推荐

