Solidity
試圖獲得未定義的映射值的預期行為是什麼?
在 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。為什麼會這樣?鍵address1和address2未在*_allowed*中初始化。
我期待一個 KeyError,就像其他語言(python 等)一樣。
您可以將映射視為雜湊表,它實際上被初始化,使得每個可能的鍵都存在並映射到字節表示全為零的值,即類型的預設值。
關於這裡的預設值,它指出:
聲明的變數將具有一個初始預設值,其字節表示全為零。變數的“預設值”是任何類型的典型“零狀態”。例如,布爾值的預設值為 false。uint 或 int 類型的預設值為 0。對於靜態大小的數組和 bytes1 到 bytes32,每個單獨的元素將被初始化為其類型對應的預設值。最後,對於動態大小的數組、字節和字元串,預設值為空數組或字元串。
因此,您將獲得
uint256
ie的預設初始化值0
。