函数可见性1
上一节
下一节
函数可见性
在之前函数的关卡中我们了解到了可见性有 public 和 private 两个属性。除他们之外,Solidity 其实还有另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)。
Public – 公共状态变量可以在内部访问,也可以通过消息访问。
Private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问。
internal 和 private 类似,但能访问派生合约。
external 与public 类似,但只能在合约之外调用。
声明函数 internal 或 external 类型的语法,与声明 private 和 public类 型相同:
例子:
contract Sandwich {
uint private sandwichesEaten = 0;
function eat() internal {
sandwichesEaten++;
}
}
contract BLT is Sandwich {
uint private baconSandwichesEaten = 0;
function eatWithBacon() public returns (string) {
baconSandwichesEaten++;
// 因为eat() 是internal 的,所以我们能在这里调用
eat();
}
}实战练习
要配对繁衍生成一个新的区块宠物,我们一定会调用 _createPet。所以在这之前我们要确保能从 petMating 中调用 _createPet 函数。
将
_createPet()函数的属性从private改为internal, 使得继承合约可以访问到它。


