Solidity进阶之路:僵尸攻击人类 - 第9章: 更多关于函数可见性

Solidity Path: Beginner to Intermediate Smart Contracts

课程链接:https://cryptozombies.io/zh/lesson/2

你成功晋升到第二课啦!

厉害了,我的人类! 你比我设想的更会编程! 第二课中,你会学到如何通过猎食其他生物,扩张你的僵尸军团在这一课里,我们会使用到一些高级的Solidity概念,所以你一定要先完成第一课。

第9章: 更多关于函数可见性

我们上一课的代码有问题!

编译的时候编译器就会报错。

错误在于,我们尝试从ZombieFeeding中调用_createZombie函数,但_createZombie却是ZombieFactoryprivate(私有)函数。这意味着任何继承自ZombieFactory的子合约都不能访问它。

internal 和 external

publicprivate属性之外,Solidity还使用了另外两个描述函数可见性的修饰词:internal(内部)external(外部)

internalprivate类似,不过,如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“internal(内部)”函数。(嘿,这听起来正是我们想要的那样!)。

externalpublic类似,只不过这些函数只能在合约之外调用 - 它们不能被合约内的其他函数调用。稍后我们将讨论什么时候使用externalpublic

声明函数internalexternal类型的语法,与声明privatepublic类型相同:

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();
    }
}

你可能感兴趣的:(Solidity,Path,智能合约,以太坊,区块链)