查看OpenZeppelin教程,我看到了以下代码片段:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract GameItem {
constructor() ERC721("GameItem", "ITM") {}
构造函数中允许在constructor()之后传入类实例的语法是什么?我似乎在Solidity文档
中找不到任何参考。调用父类构造函数,在本例中父类命名为ERC721
。这与在其他语言中调用super.constructor()
或parent.constructor()
相同。
为了调用父构造函数,你的契约需要实际继承它:
contract GameItem is ERC721 {
Solidity支持从多个父节点继承。这就是为什么不能只使用模棱两可的关键字,如parent
。通过显式地声明父类名,您可以指定要将哪些值传递给哪个父类:
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