Solidity
ERC721 合約 - 為什麼 _safeMint() 總是立即呼叫另一個 _safeMint()?
當需要進行實際的minting時,似乎每個ERC721合約都呼叫該函式的2參數版本,
_safeMint()
然後該函式又立即在內部呼叫3參數版本的_safeMint()
.這就是我的意思——這是直接來自 OpenZeppelin 官方ERC721.sol合約的程式碼:
// The 2-argument version: function _safeMint(address to, uint256 quantity) internal { // Immediately call the 3-argument version: _safeMint(to, quantity, ""); } // And here's that 3-argument version: function _safeMint(address to, uint256 quantity, bytes memory _data) internal { // minting logic/code, usually eventually calling: _mint(); }
所以就像我說的,我一次又一次地看到這種模式,幾乎在所有的鑄幣契約中。
所以我想知道我們是否有任何理由不能直接從我們的合約中呼叫 3 參數版本並跳過那個 2 參數版本——因為它似乎所做的就是呼叫 3 參數版本——並且做完了嗎?
特別是如果我們知道我們永遠不會對必須
data
傳入的參數有任何真正的價值,因此""
我們自己可以愉快地通過它嗎?
您可以立即呼叫 3 參數方法。
為方便開發,為雙參數版本提供了預設值。這樣,您無需弄清楚在
_data
不使用時需要應用哪些預設值。2 參數版本呼叫三參數版本的原因也是為了可維護性。如果 3 參數版本被覆蓋,您仍然希望 2 參數版本呼叫具有預設值的 3 參數版本
_data
。這種模式稱為重載,在 Java 等 OOP 語言中很常見。 https://www.mygreatlearning.com/blog/method-overloading-in-java