news 2026/5/19 6:42:01

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:44:42

Node.js C++ Addons:FFI 与 N-API 的性能与兼容性对比

欢迎来到本次关于Node.js C Addons的深入探讨。在Node.js生态系统中,JavaScript以其单线程、事件驱动的非阻塞I/O模型而闻名,非常适合处理高并发的网络应用。然而,当面临计算密集型任务(如图像处理、密码学、科学计算)…

作者头像 李华
网站建设 2026/5/16 19:55:05

小学生学C++编程 (变量精讲)

一、🎉✨《C 变量王国大冒险》✨🎉1、🏰 什么是变量?——“贴着名字的小盒子”想象你来到一个神奇的王国——变量王国! 这里有很多很多小盒子,每个盒子上都贴着一个名字,比如:age&am…

作者头像 李华
网站建设 2026/5/18 21:16:29

MYSQL-存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也被称为表类型。MySQL的存储引擎是数据库的底层核心组件,它决定了数据如何存储、如何索引、是否支持事务以及如何实现并发…

作者头像 李华
网站建设 2026/5/12 17:52:02

132页RAG实践手册:构建知识库和问答系统的实战指南

在人工智能技术日新月异的今天,越来越多的人希望能够拥有属于自己的智能助手,提升工作效率、优化知识管理,甚至打造个人品牌。《RAG Handbook》正是为此而生。 本书将系统性地介绍如何从零开始,基于RAG(Retrieval‑Aug…

作者头像 李华
网站建设 2026/5/12 18:34:53

1小时验证创意:用MVC框架快速构建产品原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速生成一个共享办公空间预订系统的原型。使用Ruby on Rails框架,实现以下核心功能:1) 空间列表展示;2) 预订表单;3) 简单的日历视图…

作者头像 李华