You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中修饰器内单下划线(_)的作用是什么?

Solidity修饰器中_的作用(以OpenZeppelin Ownable的onlyOwner为例)

先看你提到的onlyOwner修饰器代码:

modifier onlyOwner() {
   require(isOwner());
   _;
}

这个单下划线_是Solidity修饰器的执行占位符,核心作用是标记「被修饰函数的代码要插入执行的位置」:

  • 当被这个修饰器标记的函数(比如Ownable里的transferOwnership)被调用时,会先执行修饰器里的require(isOwner()),校验调用者是不是合约所有者;
  • 校验通过后,才会执行_所在位置的被修饰函数的全部代码;
  • 如果校验失败,require会直接抛出错误,被修饰的函数代码根本不会触发执行。

它不是单纯的“必要组成部分”,还决定了修饰器逻辑和被修饰函数逻辑的执行顺序——你也可以把_放在修饰器逻辑前面,那就是先跑被修饰函数的代码,再执行修饰器的校验(不过这种场景极少,权限类修饰器基本都是先做校验)。

内容的提问来源于stack exchange,提问作者oleracea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:06:19