当前位置: 首页 > news >正文

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; _; // 执行函数体 // 🚨
http://www.cnnetsun.cn/news/5931.html

相关文章:

  • Wan2.2-T2V-A14B能否取代传统视频剪辑师?业内专家这样说
  • 热力图技术实战指南:从基础应用到企业级解决方案
  • DeepSeek+Dify构建智能体和企业知识库资料
  • 终极Arial字体资源库:获取与完整使用指南
  • 揭秘多模态Agent服务协同瓶颈:如何用Docker Compose实现高效编排?
  • Axure RP中文汉化包:打造本土化原型设计新体验
  • WhiteSur桌面主题系统集成深度解析
  • 如何免费快速实现跨平台歌单迁移:GoMusic终极指南 [特殊字符]
  • redis持久化|主从复制|哨兵模式
  • 我用 Koodo Reader 搭建了一个“自己的云端电子书图书馆”:全平台同步、在线阅读太爽了
  • 教你用服务器搭建一个极致顺滑的终端环境:让 WindTerm 发挥真正实力
  • 65、X86架构寄存器与指令详解
  • Docker+Jenkins 自动化部署 学习笔记
  • Redis 入门到精通
  • iOS钉钉自动打卡完整教程:5分钟搞定远程签到
  • Vita3K模拟器完整使用指南:免费畅玩PS Vita游戏
  • 突破性能瓶颈:揭秘大模型训练中前馈网络300%加速革命
  • 编程考核如何助力竞赛准备?标准化命题帮你发现知识漏洞
  • 炉石传说脚本使用指南:从零开始掌握自动化游戏技巧
  • 揭秘Spider:一款超前设计的Web编程语言遗产
  • 深入解析ZooKeeper如何保障事务顺序一致性
  • 字节跳动BFS-Prover-V2刷新数学推理纪录:95.08%准确率背后的AI证明革命
  • Java 后端踩坑记:Nginx+SpringBoot 集群遇恶意请求,雷池 WAF 免费方案守住稳定性
  • 视频推流平台EasyDSS无人机推流直播技术在水利巡检场景的应用与实践
  • Zookeeper 面试题及答案整理,最新面试题
  • Cupscale:让模糊图像瞬间清晰的AI超分辨率神器
  • antigravity不能选择模型的解决方案
  • 进程的信号处理(signal),守护进程编写,进程组和会话
  • Shell,解释程序,脚本程序与进程以及线程的关系,工作原理和机制
  • AI营销内容生产:哪些平台支持全球多语言内容同步生产?