Solidity

試圖獲得未定義的映射值的預期行為是什麼?

  • December 5, 2018

在 ERC20 標準中,_allowed定義為:

mapping (address => mapping (address => uint256)) private _allowed;

getter 函式定義為:

function allowance(address owner, address spender) public view returns (uint256) {
       return _allowed[owner][spender];
}

我正在測試該函式,並呼叫allowance( address1 , address2 ) 我收到0。為什麼會這樣?鍵address1address2未在*_allowed*中初始化。

我期待一個 KeyError,就像其他語言(python 等)一樣。

根據solidity docs

您可以將映射視為雜湊表,它實際上被初始化,使得每個可能的鍵都存在並映射到字節表示全為零的值,即類型的預設值。

關於這裡的預設值,它指出:

聲明的變數將具有一個初始預設值,其字節表示全為零。變數的“預設值”是任何類型的典型“零狀態”。例如,布爾值的預設值為 false。uint 或 int 類型的預設值為 0。對於靜態大小的數組和 bytes1 到 bytes32,每個單獨的元素將被初始化為其類型對應的預設值。最後,對於動態大小的數組、字節和字元串,預設值為空數組或字元串。

因此,您將獲得uint256ie的預設初始化值0

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