news 2026/6/24 19:43:41

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/6/25 0:59:03

Wan2.2-T2V-A14B能否取代传统视频剪辑师?业内专家这样说

Wan2.2-T2V-A14B能否取代传统视频剪辑师?业内专家这样说 你有没有想过,有一天只要说一句“生成一个宇航员骑自行车穿越火星的视频”,几秒钟后就能看到高清画面自动流淌出来?🤯 不是科幻电影,这事儿正在发生…

作者头像 李华
网站建设 2026/6/25 12:30:48

热力图技术实战指南:从基础应用到企业级解决方案

热力图技术实战指南:从基础应用到企业级解决方案 【免费下载链接】heatmap.js 🔥 JavaScript Library for HTML5 canvas based heatmaps 项目地址: https://gitcode.com/gh_mirrors/he/heatmap.js 热力图作为数据可视化的重要工具,在用…

作者头像 李华
网站建设 2026/6/24 23:58:08

DeepSeek+Dify构建智能体和企业知识库资料

在现代企业中,知识管理与信息检索是非常关键的领域。随着数据量的爆炸性增长,传统的信息检索方式面临着巨大挑战。为了应对这些挑战,向量索引与语义检索技术应运而生,它们能够大幅提升信息检索的准确性和效率。近期,Di…

作者头像 李华
网站建设 2026/6/25 0:24:40

终极Arial字体资源库:获取与完整使用指南

想要快速获取专业的Arial字体吗?这里为您提供完整的Arial字体资源,包含所有常用字重和样式。无论您是网页设计师还是文档编辑者,这些字体资源都能满足您的需求。Arial字体作为经典的无衬线字体,在各类设计场景中都有出色表现。 【…

作者头像 李华
网站建设 2026/6/25 2:04:18

揭秘多模态Agent服务协同瓶颈:如何用Docker Compose实现高效编排?

第一章:多模态 Agent 服务编排的核心挑战在构建基于多模态输入(如文本、图像、语音)的智能 Agent 系统时,服务编排面临前所未有的复杂性。不同模态的数据处理依赖异构的服务模块,如何高效协调这些模块并保证整体系统的…

作者头像 李华
网站建设 2026/6/25 1:53:57

Axure RP中文汉化包:打造本土化原型设计新体验

Axure RP中文汉化包:打造本土化原型设计新体验 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 想要让专…

作者头像 李华