构造函数(constructor)是一种特殊的函数,每个合约只能定义一个构造函数,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始化合约的owner地址:
address owner; // 定义owner变量
// 构造函数
constructor() public {
owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
}
// 多个constructor存在,编译报错
// constructor(address _name) public{
// name = _name;
// }
注意点:不能在其他合约直接修改其他合约的状态变量
如果想再修改其他合约的状态变量,必须通过合约对外暴露的函数才能修改,不能直接修改状态变量:
contract TestConstructor{
address public owner; // 定义owner变量
function test() public{
Y y = new Y(msg.sender);
y.name = msg.sender;//报错,不能直接修改状态变量
y.changeName(msg.sender);//可行
}
}
contract Y{
address public name;
function changeName(address _name) public{
name = _name;
}
}
这节学习了合约的构造函数,和其他语言的类构造函数类似,唯一区别是,solidity的合约只能定义一个构造函数。
全部代码:
https://github.com/Luca-Hsu/SuperSolidity/blob/main/07_Constructor/construct.sol.txt
Reference:
https://mirror.xyz/ninjak.eth/X8HHTaD8hqkfshhugHHp7ho3EaLjuviya_g1l3MsF_U

