实验4.9 可见性修饰符

Solidity函数的可见性有常见的三种,其作用可以视为一种权限的限制。其中pure与view是solidity独有的可见性的修饰。

实验目的

1. 掌握private、internal、exteranel、public、pure、view的用法。

2. 了解solidity中函数返回值的特性。

实验要求

1. 在实例1,2,3中函数都无法调用,请修改代码使得函数能够正常调用。

2. 请补充下面的定义:

private:____(能/不能)被继承、____(能/不能)在外部调用、____(能/不能)在内部调用。

internal:____(能/不能)被继承、____(能/不能)在外部调用、____(能/不能)在内部调用。

exteranel:____(能/不能)被继承、____(能/不能)在外部调用、____(能/不能)在内部调用,可以通过____关键字强行调用。

public:____(能/不能)被继承、____(能/不能)在外部调用、____(能/不能)在内部调用,他的权限最____(大/小)

pure:____(能/不能)读取全局变量、____(能/不能)修改全局变量、____(会/不会)消耗Gas。

view:____(能/不能)读取全局变量、____(能/不能)修改全局变量、____(会/不会)消耗Gas。

函数____(能/不能)有多个返回值。

以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验

//示例1:private
pragma solidity ^0.8.0;
contract Kongzi{ 
   function laoshi() private pure returns(string memory) {
       return "Founder of Confucianism";
   }
   function laoshitext() public view{
       this.laoshi(); //报错
   }
}
 
//示例2:internal
contract Teacher{
    function Kongzi() internal pure returns(string memory){
        return"Founder of Confucianism";
    }
    function testKongzi() internal pure returns(string memory){
        return Kongzi();
    }
}
contract Laozi {
    Teacher a = new Teacher();
    function test() public pure{
        a.Kongzi();
    }
}

contract Kongzi is Teacher{
    function test() public pure returns(string memory){
        this.Kongzi();//报错
    }
} 

//示例3:external
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract teacher{
    function Kongzi() external pure returns(string memory){
        return"Founder of Confucianism";
    }
    function testKongzi() public{
        this.Kongzi();
    }
}
contract Kongzi is teacher{
    function test() public{
        return Kongzi();//报错
    }
}

下面是本次实验所配套的视频教程: