首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Remix显示值

Remix显示值
EN

Ethereum用户
提问于 2022-08-13 09:21:56
回答 1查看 436关注 0票数 0

我是个生疏的新手。下面是简单的Solidity源代码

代码语言:javascript
复制
pragma solidity ^0.4.21; 

contract CAT {
    event XYZ (uint Z ) ;
    uint[] x;  
    uint a ;

function f(uint[]  memoryArray) public returns (uint[] ){
       x = memoryArray; 
      uint[]  y = x; 
      y.length = 2 ;       // line 1
      a = y.length ; 
      emit XYZ ( a  );
     return x ; 
  }
}

我用Remix。我部署了合同,并且能够输入memoryArray1的值。

但是,我使用了事件,并发出了这样的想法:在部署之后,我将在左侧的混合中看到a的值,但是没有任何类似的东西显示出来。这意味着我完全遗漏了一些东西。谁能让我知道我需要添加什么,这样我也可以看到一个在混合中的价值。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-08-13 10:21:03

如果您想在智能契约之外显示值(在这种情况下,可以在remix中看到它),则必须使用view关键字。它是只读函数,它确保状态变量在调用它们之后不会被修改.

重要:最佳实践表明,您必须只使用view函数来读取智能契约中的变量。

在本例中,您在读取数组之前实现了一个逻辑,您将为这个操作花费更多的气体。

您可以考虑实现允许读取数组值的getter()函数的选项。

调整原始智能合同的示例如下:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.4.21; 

contract CAT {
    event XYZ (uint Z ) ;
    uint[] x;  
    uint a ;

    function f(uint[] memoryArray) public {
        x = memoryArray; 
        uint[] storage y = x; 
        y.length = 2;
        a = y.length; 
        emit XYZ (a);
    }

    // NOTE: Getter() function
    function getValue() external view returns(uint[]) {
        return x;
    }
    
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/133539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档