Solidity
為什麼參數必須是“儲存”或“記憶體”?
我正在創建一個這樣的令牌:
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
映射,因此它是對儲存的引用,這就是編譯器請求您顯式聲明它的原因像這樣。