Solidity
在混音中顯示價值
我是 Solidity 的新手。下面是簡單的 Solidity 原始碼
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 ; } }
我使用混音。我部署了契約,我可以輸入
memoryArray1
.但是,我使用事件並發出,認為在部署後我會
a
在左側的混音中看到 的值,但那裡沒有顯示類似的東西。這意味著我在那裡完全錯過了一些東西。任何人都可以讓我知道我需要添加什麼,以便我也可以看到 a in remix 的價值。
如果你想在你的智能合約之外顯示值(在這種情況下在 remix IDE 中看到它)你必須使用
view
關鍵字。它是只讀函式,它確保狀態變數在呼叫後不能被修改。重要提示:最佳實踐表明您
view
只能使用函式從智能合約中讀取變數。在這種情況下,您在讀取數組之前實現了一個邏輯,並且您將為此操作花費更多的氣體。
您可以考慮實現一個
getter()
允許您讀取數組值的函式的選項。調整原始智能合約的範例如下:
// 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; } }