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

Solidity新手编写存储合约无法正确读取正负存储值问题求助

问题原因说明

你目前的代码核心问题是只声明了一个全局状态变量number:

  • 不管调用storePositive还是storeNegative,都是往这同一个存储空间写值,后一次的写入会直接覆盖之前的存储结果
  • 两个读取方法retreivep和retreiven读的都是这同一个变量,自然返回结果完全一致
  • 如果你没有调用过任意一个存储方法,int类型的默认初始值就是0,所以两个方法都会返回0:int256: 0
修正后的代码

你需要声明两个独立的状态变量,分别存储正数和负数:

//SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.1;

contract Storage{
    // 分别声明两个状态变量存储正数、负数
    int positiveNumber;
    int negativeNumber;

    function storePositive(int256 nump) public{
        // 写入正数专属变量
        positiveNumber = nump;
    }
    function storeNegative(int256 numn) public{
        // 写入负数专属变量
        negativeNumber = -numn;
    }
    function retreivep() public view returns(int256){
        // 读正数变量
        return positiveNumber;
    }
    function retreiven() public view returns(int256){
        // 读负数变量
        return negativeNumber;
    }
}
测试操作步骤
  1. 部署合约后,先调用storePositive传入参数比如10
  2. 再调用storeNegative传入参数比如5(方法内会自动转成-5存储)
  3. 调用retreivep就能得到返回值10,调用retreiven就能得到返回值-5

小提示:你代码里的读取方法名retreive是拼写失误,正确拼写是retrieve,不影响运行但是可读性会稍差,可以按需调整。

内容的提问来源于stack exchange,提问作者Prab-mat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:05