You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Remix中Solidity数组修改后,同函数无返回值的技术疑问

Solidity函数修改数组后无法返回值的问题分析

测试合约代码

// SPDX-License-Identifier: Unlicensed
pragma solidity >= 0.7.0;

contract Basic{
    
    uint[] public val  = [1,2];

    function demo() public  returns(uint) {
        val[0] = 22;
        return val[0];
    }

    function d2() public view returns(uint){
        return val[0];
    }
}

问题场景

在Remix平台测试时发现:

  • demo函数未添加val[0] = 22赋值语句时,能正常返回结果
  • 添加赋值修改数组后,demo函数不再显示返回值

疑问:Solidity中修改数组后,是否无法在同一函数中查看返回值?

问题解答

Solidity本身完全允许在修改状态变量(比如这里的数组)后,在同一函数中返回值,你遇到的问题是Remix的交互逻辑导致的,和语言特性无关:

  1. 交易与调用的区别

    • 当函数修改了状态变量(如demo里修改val数组),这个函数会触发区块链交易,交易是异步上链的,Remix默认只会返回交易哈希,不会直接展示函数的return值——因为交易需要等待节点打包确认,无法实时返回执行结果
    • 如果函数没有修改状态,即使没加view修饰符,Remix也会以"调用(call)"的方式执行,这是只读操作,能直接返回函数的返回值
  2. 验证修改与返回值的方法

    • 调用demo函数后,再调用d2(),会看到val[0]已经被修改为22,说明demo的执行是成功的
    • 若要查看demo函数的返回值,可使用Remix的Debug功能:执行demo后,点击交易记录中的"Debug"按钮,逐步执行代码到return语句,就能看到返回的22
    • 若只是验证返回逻辑,可临时给demo加上view修饰(但此时无法修改状态,仅做测试用)

内容的提问来源于stack exchange,提问作者Md Arif Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:27:06