我使用的是 Solidity 0.5.16,在合约的函数中,我想调用另一个合约的
initialize()
方法。此方法不接受任何参数。
contract.call.value(0)(
abi.encodeWithSignature("initialize()",);
);
但是上面的方法不能正确编译..
不要使用保留关键字
contract
- 例如将其替换为 externalContract
。
当您不传递任何参数时,请删除
,
函数中的逗号 encodeWithSignature()
。
删除
;
后面的分号 encodeWithSignature()
。这会导致另一个解析错误,因为您仍在 call
函数中构建参数。
pragma solidity 0.5.16;
contract MyContract {
function foo() external {
address externalContract = address(0x123);
(bool success, bytes memory returnedData) = externalContract
.call.value(0)(
abi.encodeWithSignature("initialize()"
)
);
}
}
以上语法现已弃用,您可以使用以下语法:
pragma solidity ^0.8.0;
contract MyContract {
function foo() external {
address externalContract = address(0x123);
(bool success, bytes memory returnedData) = externalContract.call
{value: 0}
(abi.encodeWithSignature("initialize()")
);
}
}