Storage
了解數據位置
pragma solidity ^0.5.16; contract mycontract{ uint256 public a; function foo(string calldata _name) external { string memory names; names = _name; getname(names); } function getname(string memory nameget) internal view returns(string memory){ return nameget; } function setinteger(uint256 _a) public{ a = _a; } }
上面的程式碼有什麼問題?當 foo 被呼叫時,它應該返回字元串,但它沒有。
程式碼有兩個問題:
foo
作為一個函式不返回任何東西。如果你想退貨,你必須聲明它會退貨。foo
不是視圖或純函式。鏈下我們可以很容易地從視圖和純函式中獲取返回值,但對於非常量函式來說並不容易。您可以閱讀此答案以獲取更多詳細資訊:交易和通話有什麼區別?.如果
foo
不修改儲存,您可以將其聲明為 aview
並使其返回一個字元串。function foo(string calldata _name) external view returns (string memory) { string memory names; names = _name; return getname(names); }
如果
foo
確實修改了儲存,您不能將其聲明為視圖或純,一種解決方案是將值作為參數發出事件,有關詳細資訊,請參閱連結問題。