重点只有一句话:函数可见修饰符表明了谁可以调用它,private表示只能在当前合约中调用该函数,internal表示只能在当前合约及其子合约中调用该函数,external表示只能在合约外部调用该函数。public表示函数是公开的可以被任意调用。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
contract test{
//只能在当前合约中调用
function getNum1() private returns (uint) {
return 1;
}
//只能在当前合约及其子合约中调用
function getNum2() internal returns (uint) {
return 1;
}
//只能被当前合约外部调用
function getNum3() external returns (uint) {
return 1;
}
function getNum4() public returns (uint) {
return 1;
}
function call() public {
getNum1();
getNum2();
//compile error,因为external只能被合约外部调用
getNum3();
getNum4();
}
}
solidity函数可见性无非也和其他语言一样,是为了封装性,你只需要关心合约对外公开的函数功能,那些私有的函数就让他们被开发者折腾吧。
