Erc-721
具有公共視圖功能的私有變數
在 Openzeppelin
ERC721.sol
合約中,引入了私有變數:// Token name string private _name; // Token symbol string private _symbol;
然後為這些變數分配一個公共視圖函式來顯示它們的內容:
/** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; }
為什麼這些是私有的而不是公開的?正如這裡提到的,在這兩種情況下,沒有人可以更改值。
您注意到的模式與使用
internal
儲存變數的方法競爭。這裡的一般想法是您可以讀取變數而不是寫入。它允許合約做出一些額外的保證,例如變數可以是只讀的。我有一個問題可以請求公共/私有變數的語言功能。
總的來說,這是物件導向設計中的一種常見模式,因此它很自然並且會不斷被使用。