Solidity

為什麼參數必須是“儲存”或“記憶體”?

  • June 5, 2019

我正在創建一個這樣的令牌:

pragma solidity ^0.5.0;

import "../utils/math/SafeMath.sol";


contract ExampleDivisibleNFTs {
   using SafeMath for uint256;

   // Percentage of ownership over a token  
   mapping(address => mapping(string => uint)) ownerToTokenShare;

   // If a token has been created
   mapping(string => bool) mintedToken;

   modifier onlyNonExistentToken(string _tokenId) {
       require(mintedToken[_tokenId] == false, "the NFT already exists");
       _;
   }

   modifier onlyExistentToken(string _tokenId) {
       require(mintedToken[_tokenId] == true, "the NFT doesn't exists");
       _;
   }

}

我正在測試混音,但我有以下問題

函式中參數的數據位置必須是“儲存”或“記憶體”,但沒有給出。

modifier onlyNonExistentToken(string _tokenId) {
                             ^-------------^

為什麼一個參數可能是一個“儲存”,它並不總是“記憶體”?

Solidity 編譯器需要顯式聲明數據位置以進行持久性和語義推理。

話雖如此,在您的特定智能合約中,_tokenID字元串是通過引用傳遞的,並且由於引用 –> 指向您的mintedToken映射,因此它是對儲存的引用,這就是編譯器請求您顯式聲明它的原因像這樣。

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