news 2025/12/18 16:05:22

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:25:27

别再“盲人摸象”:当IT资产管理始于精准的自动发现

每个IT团队都梦想过这样一个场景:打开一个控制台,公司内所有终端设备——无论它在总部机房、分支机构,还是员工的家里——都清晰在列。硬件配置、软件清单、补丁状态、位置信息一目了然,实时更新。但现实往往是:新同事…

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

基于单片机的跌倒检测和报警系统设计与实现(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T4042309M设计简介:本设计是基于单片机的跌倒检测和报警系统设计与实现,主要实现以下功能:通过加速度传感器检测摔倒情况…

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

Coze 工作原理与应用实例:从零打造 AI Agent

Coze 工作原理与应用实例:从零打造 AI Agent 摘要:Coze(中文名:扣子)是字节跳动推出的一站式 AI Bot 开发平台。不同于简单的对话框,Coze 允许开发者通过低代码/无代码的方式,将大语言模型&…

作者头像 李华
网站建设 2025/12/14 10:13:36

销售全链路透视:AI CRM系统的数据闭环

在传统的企业管理认知中,CRM(客户关系管理)系统常常扮演着一个矛盾的角色。一方面,它是记录客户信息的中央资料库,承载着企业最宝贵的资产;另一方面,它却常常沦为一个冰冷、被动的数据库&#x…

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

Linux学习日记18:线程的分离

一、前言前面我们学习了线程的一些基础知识&#xff0c;学习了线程的创建与使用&#xff0c;今天我们来学习线程的分离与同步。二、线程分离2.1、函数原型函数原型如下&#xff1a;#include <pthread.h> int pthread_detach(pthread_t thread);参数&#xff1a;thread&am…

作者头像 李华