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; } }
测试操作步骤
- 部署合约后,先调用
storePositive传入参数比如10 - 再调用
storeNegative传入参数比如5(方法内会自动转成-5存储) - 调用
retreivep就能得到返回值10,调用retreiven就能得到返回值-5
小提示:你代码里的读取方法名
retreive是拼写失误,正确拼写是retrieve,不影响运行但是可读性会稍差,可以按需调整。
内容的提问来源于stack exchange,提问作者Prab-mat
相关产品推荐
相关产品推荐

