Solidity
Solidity 語法問題
如果一個函式之前被傳遞
{
給另一個函式會發生什麼?就像
DetailedERC20(_name, _symbol, TOKEN_DECIMALS)
在這個例子中一樣:function MyToken(Registry _registry, string _name, string _symbol) public DetailedERC20(_name, _symbol, TOKEN_DECIMALS) { require(_registry != address(0)); registry = _registry; }
會不會和上面一樣:
function MyToken(Registry _registry, string _name, string _symbol) public { DetailedERC20(_name, _symbol, TOKEN_DECIMALS) require(_registry != address(0)); registry = _registry; }
這是
constructor
舊語法中的一個。該名稱MyToken
與契約的名稱相匹配,因此被視為建構子。像這樣:contract MyToken { function MyToken( ...
這是舊系統。這導致了開發人員的一些錯誤,因此最近的編譯器使用
constructor
關鍵字,如下所示:contract MyToken { constructor(...
建構子就像
init()
其他語言一樣。它們在部署期間只執行一次。它們無法再次執行,因此,建構子字節碼甚至沒有被儲存。您看到的模式還使用傳遞給建構子的繼承和參數。假設你有一個合約
DetailedERC20
並且它的建構子需要一些參數(_name, _symbol, TOKEN_DECIMALS)
你也有
MyToken
,它從第一個繼承,比如:contract MyToken is DetailedERC20 { ...
MyToken
有一個帶有一些參數的建構子。其中一些參數需要傳遞給DetailedERC20
’s 的建構子,以便它知道該做什麼。第一組參數
(Registry _registry, string _name, string _symbol)
是聲明函式簽名。請注意,所有變數都已鍵入。第二個是收集一些定義的輸入並將它們傳遞給繼承的建構子。這裡還有另一個範例/解釋:繼承的建構子
希望能幫助到你。