Solidity 构造函数语法

Solidity constructor syntax

浏览 OpenZeppelin 教程时,我发现了这个代码片段:

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract GameItem {
    constructor() ERC721("GameItem", "ITM") {}

允许在 constructor() 之后传入 class 实例的构造函数中的语法是什么?我似乎无法在 Solidity 文档中找到对此的任何参考

它正在调用一个父构造函数,在本例中,父 class 被命名为 ERC721。这与在某些其他语言中调用 super.constructor()parent.constructor() 相同。

为了调用父构造函数,您的合约需要实际继承它:

contract GameItem is ERC721 {

Solidity 支持从多个父级继承。这就是为什么您不能只使用诸如 parent 之类的模棱两可的关键字。通过显式声明父 class 名称,您可以指定要将哪些值传递给哪个父:

pragma solidity ^0.8;

contract Parent1 {
    constructor(string memory message1) {}
}

contract Parent2 {
    constructor(string memory message2) {}
}

contract Child is Parent1, Parent2 {
    constructor() Parent1("hello") Parent2("world") {}
}

文档:https://docs.soliditylang.org/en/v0.8.13/contracts.html#arguments-for-base-constructors