news 2025/12/14 12:29:39

Solidity函数修改器中包含return的执行顺序

作者头像

张小明

前端开发工程师

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

关键概念

在 Solidity 中,如果在修改器中执行return,会立即终止当前函数的执行,不会执行目标函数体,但会执行修改器中_;之后的代码。

执行顺序详解

基本执行流程

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract ModifierReturn { uint256 public value; string public message; modifier withReturnCheck() { value = 1; message = "Before _"; // 如果满足条件,直接返回 if (msg.sender != address(0x123)) { value = 99; // 这会被设置 message = "Early return"; // 这会被设置 return; // 立即返回,不会执行目标函数 } _; // 如果上面没有return,这里会执行目标函数 value = 3; // 只有在没有提前return且目标函数执行完成后才会执行 message = "After _"; } function testFunction() public withReturnCheck { value = 2; message = "In function"; } }

不同情况的分析

情况1:在_;return

contract ReturnBeforeUnderscore { uint256 public step = 0; modifier mod1() { step = 1; if (true) { step = 10; return; // 立即返回 } _; // 不会执行 step = 3; // 不会执行 } function test1() public mod1 { step = 2; // 不会执行 } // 调用 test1() 后: step = 10 }

情况2:在_;return

contract ReturnAfterUnderscore { uint256 public step = 0; bool public flag = false; modifier mod2() { step = 1; _; // 执行目标函数 step = 3; if (!flag) { step = 4; return; // 提前结束修改器 } step = 5; // 不会执行 } function test2() public mod2 { step = 2; flag = true; } // 调用 test2() 后: step = 4, flag =
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/11 21:27:07

为啥网站跳转重定向是307 而不是 301 呢?

文章目录为啥网站跳转重定向是307 而不是 301 呢?为什么出现307 状态码呢?一 HSTS 是什么?二 HSTS 如何生效?三、Chrome 浏览器如何支持 HSTS?四、注意事项五 总结六 Chrome 博客 default for navigation https七 解释…

作者头像 李华
网站建设 2025/12/11 21:26:55

Zabbix监控模板实战指南:从零构建企业级监控体系

在当今数字化时代,企业IT系统的稳定运行至关重要。Zabbix作为一款功能强大的开源监控解决方案,其丰富的社区模板库为各类设备和应用提供了即插即用的监控能力。无论你是刚接触Zabbix的新手,还是希望优化现有监控体系的管理员,本文…

作者头像 李华
网站建设 2025/12/11 21:26:49

RulersGuides.js:网页设计中的Photoshop式标尺与辅助线终极指南

RulersGuides.js:网页设计中的Photoshop式标尺与辅助线终极指南 【免费下载链接】RulersGuides.js Creates Photoshop-like guides and rulers interface on a web page 项目地址: https://gitcode.com/gh_mirrors/ru/RulersGuides.js 你是否曾经在网页设计时…

作者头像 李华
网站建设 2025/12/11 21:25:52

如何快速掌握MagicEdit:高保真视频编辑的终极指南

如何快速掌握MagicEdit:高保真视频编辑的终极指南 【免费下载链接】magic-edit MagicEdit - 一个高保真和时间连贯的视频编辑工具,支持视频风格化、局部编辑、视频混合和视频外绘等应用。 项目地址: https://gitcode.com/gh_mirrors/ma/magic-edit …

作者头像 李华
网站建设 2025/12/11 21:24:15

基于STM32的辅助病床智慧监护系统设计(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T4102310M设计简介:以STM32单片机为核心,结合体温、血氧、心率等生理特征参数的监测,并可按需设定点滴时间定时参数&…

作者头像 李华
网站建设 2025/12/11 21:23:31

AI音频分离技术深度解析:Ultimate Vocal Remover的多轨处理革命

AI音频分离技术深度解析:Ultimate Vocal Remover的多轨处理革命 【免费下载链接】ultimatevocalremovergui 使用深度神经网络的声音消除器的图形用户界面。 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 在数字音频处理领域&a…

作者头像 李华