Solidity

從映射中刪除條目與將其設置為零

  • November 27, 2022

在大多數 ERC721setApprovalForAll()實現中,要撤銷批准,映射設置為 0,而不是刪除條目。我想知道如果許多使用者取消了很多批准會發生什麼情況,刪除不會在映射中節省大量儲存空間嗎?

將其放入程式碼中,看起來我有一個映射:

mapping(address => mapping(address => bool)) private _operatorApprovals;

delete _operatorApprovals[owner][operator];和有什麼區別_operatorApprovals[owner][operator] = 0;

先感謝您。

更新/回答

  1. delete與設置為預設值相同。堆棧交換
  2. mapping不跟踪鍵,也沒有長度。中等

delete _operatorApprovals[owner][operator]是一樣的,_operatorApprovals[owner][operator] = 0因為Solidity裡面沒有null值,把值設置為0和刪除是一樣的。

請參閱:為什麼將值設置為 0 而不是刪除它?

在 Solidity 中也是如此。刪除值或將值設置為 0

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