news 2026/2/3 8:43:18

Solidity函数中包含return并使用修改器并执行顺序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Solidity函数中包含return并使用修改器并执行顺序

核心规则总结

当函数中使用修改器并包含return语句时:

  1. 修改器中的return会立即终止整个函数的执行
  2. 函数体中的return不会影响修改器中_;之后的代码执行
  3. 执行顺序严格遵循:修改器前段代码 → 函数体 → 修改器后段代码

详细执行流程分析

情况1:修改器中有return(在_;前)

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract ModifierReturnBefore { uint256 public value; string public log; modifier checkCondition() { log = "Modifier start"; value = 1; // 检查条件,如果失败则提前返回 if (msg.sender == address(0)) { log = "Early return in modifier"; value = 999; return; // 🚨 立即终止!函数体不会执行 } _; // 如果上面没有return,这里执行函数体 log = "Modifier end"; value = 3; } function myFunction() public checkCondition { log = "Function body start"; value = 2; // 这里的return不会影响修改器后段代码的执行 return; // 以下代码不会执行 value = 22; } }

执行结果分析:

情况1: msg.sender == address(0)(无效地址) 执行顺序: 1. 修改器开始: value=1, log="Modifier start" 2. 条件满足: 执行return 3. 结果: value=999, log="Early return in modifier" 4. 函数体: 完全不执行 5. 修改器后段: 不执行 情况2: msg.sender != address(0)(有效地址) 执行顺序: 1. 修改器开始: value=1, log="Modifier start" 2. 条件不满足: 不执行return 3. 执行 `_;` → 函数体: value=2, log="Function body start" 4. 函数体return(只影响函数体) 5. 返回修改器继续: value=3, log="Modifier end" 最终: value=3, log="Modifier end"

情况2:函数体中有return

contract FunctionReturn { uint256 public value; bool public modifierCompleted; modifier myModifier() { value = 1; _; // 执行函数体 // 🚨
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/1 8:37:58

Java核心技术栈全景解析:从Web开发到AI融合

在当今软件开发领域,Java凭借其稳定性和强大的生态持续引领潮流。无论是构建高性能的Web应用,还是探索前沿AI技术,掌握核心工具链至关重要。 从Java SE 8/11/17的基础语法特性到Jakarta EE的企业级支持,再到JVM层面的优化调优&…

作者头像 李华
网站建设 2026/2/1 22:55:31

G100-RAC:ECM 经典空燃比测量与记录系统

一、产品定位与核心功能G100-RAC是美国 ECM 公司开发的专业级宽频空燃比 (AFR) 测量与记录系统,作为 ECM 早期产品线的重要成员,现已停产并归入 "Legacy Products" 系列。它巧妙地将四大核心功能集成于一体:宽量程 AFR 传感器、直观…

作者头像 李华
网站建设 2026/2/1 12:25:50

完整免费数据抓取助手浏览器扩展快速配置终极指南

完整免费数据抓取助手浏览器扩展快速配置终极指南 【免费下载链接】sci-hub-now 项目地址: https://gitcode.com/gh_mirrors/sc/sci-hub-now 数据抓取助手是一款革命性的网页数据提取工具,通过智能识别和自动化抓取技术,让普通用户也能轻松获取网…

作者头像 李华
网站建设 2026/1/30 10:12:44

BetterDiscord完整使用指南:终极Discord美化与功能增强方案

BetterDiscord完整使用指南:终极Discord美化与功能增强方案 【免费下载链接】BetterDiscordApp Better Discord App enhances Discord desktop app with new features. 项目地址: https://gitcode.com/gh_mirrors/be/BetterDiscordApp 还在为Discord单调的界…

作者头像 李华
网站建设 2026/1/30 6:24:19

校园论坛|基于springboot + vue校园论坛系统(源码+数据库+文档)

校园论坛 目录 基于springboot vue校园论坛系统 一、前言 二、系统功能演示 ​编辑 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue校园论坛系统 一、前言 博主介绍&#xff…

作者头像 李华