Storage

了解數據位置

  • July 29, 2020
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 被呼叫時,它應該返回字元串,但它沒有。

程式碼有兩個問題:

  1. foo作為一個函式不返回任何東西。如果你想退貨,你必須聲明它會退貨。
  2. foo不是視圖或純函式。鏈下我們可以很容易地從視圖和純函式中獲取返回值,但對於非常量函式來說並不容易。您可以閱讀此答案以獲取更多詳細資訊:交易和通話有什麼區別?.

如果foo不修改儲存,您可以將其聲明為 aview並使其返回一個字元串。

   function foo(string calldata _name) external view returns (string memory) {
       string memory names;
       names = _name; 
       return getname(names);
   }

如果foo確實修改了儲存,您不能將其聲明為視圖或純,一種解決方案是將值作為參數發出事件,有關詳細資訊,請參閱連結問題。

引用自:https://ethereum.stackexchange.com/questions/85358