使用和不使用 `new` 关键字创建新的 solidity 合约有什么区别?
What is the difference between creating a new solidity contract with and without the `new` keyword?
new
关键字用于创建新智能合约有什么用?为什么不直接省略这个关键字?
创建新合同时不能省略 new
关键字。
情况下:token = new Token;
创建新合约并将地址传递给token
。
情况下:token = existingToken;
existingToken
必须是现有合约(已创建)并且 token
将传递给 existingToken
.
的当前地址
您可以通过两种方式创建合同
- 使用 'new' 关键字
- 使用合约地址
使用 new 关键字实例化合约的新实例并使用新创建的合约实例
而在后一个选项中,您使用已经部署和实例化的合约的地址。您可以查看以下代码以供参考:
pragma solidity ^0.5.0;
contract Communication {
string public user_message;
function getMessage() public view returns (string memory) {
return user_message;
}
function setMessage(string memory _message) public {
user_message = _message;
}
}
contract GreetingsUsingNew {
function sayHelloUsingNew() public returns (string memory) {
Communication newObj = new Communication();
newObj.setMessage("Contract created using New!!!");
return newObj.getMessage();
}
}
contract GreetingsUsingAddress {
function sayHelloUsingAddress(address _addr) public returns (string memory) {
Communication addObj = Communication(_addr);
addObj.setMessage("Contract created using an Address!!!");
return addObj.getMessage();
}
}
new
关键字用于创建新智能合约有什么用?为什么不直接省略这个关键字?
创建新合同时不能省略 new
关键字。
情况下:
token = new Token;
创建新合约并将地址传递给
token
。情况下:
token = existingToken;
的当前地址existingToken
必须是现有合约(已创建)并且token
将传递给existingToken
.
您可以通过两种方式创建合同
- 使用 'new' 关键字
- 使用合约地址
使用 new 关键字实例化合约的新实例并使用新创建的合约实例
而在后一个选项中,您使用已经部署和实例化的合约的地址。您可以查看以下代码以供参考:
pragma solidity ^0.5.0;
contract Communication {
string public user_message;
function getMessage() public view returns (string memory) {
return user_message;
}
function setMessage(string memory _message) public {
user_message = _message;
}
}
contract GreetingsUsingNew {
function sayHelloUsingNew() public returns (string memory) {
Communication newObj = new Communication();
newObj.setMessage("Contract created using New!!!");
return newObj.getMessage();
}
}
contract GreetingsUsingAddress {
function sayHelloUsingAddress(address _addr) public returns (string memory) {
Communication addObj = Communication(_addr);
addObj.setMessage("Contract created using an Address!!!");
return addObj.getMessage();
}
}