Solidity

Solidity 語法問題

  • November 19, 2018

如果一個函式之前被傳遞{給另一個函式會發生什麼?

就像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)是聲明函式簽名。請注意,所有變數都已鍵入。第二個是收集一些定義的輸入並將它們傳遞給繼承的建構子。

這裡還有另一個範例/解釋:繼承的建構子

希望能幫助到你。

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