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
浏览 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