《论语·泰伯》有言“不在其位,不谋其政”。大意是不在那个职位上,就不去考虑那个职位上的事。Solidity中对权限的设置也类似于此,部分功能不想别人“越位”,就用专门的修饰。合理的修饰,能使代码逻辑的执行者各司其职,不相干预。

实验目的

1. 明白external的作用范围与调用方法。

2. 初步了解变量的作用范围。

实验要求

1、查看下面的示例1,按注释1,2,3要求补充好代码。思考extrenal的作用范围和内部、外部合约函数调用它的方法。

2、查看示例2的代码。思考调用函数test后,全局变量a的值是否会改变?编译部署,调用函数test,检查a的值是否改变。

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

// 示例1
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
contract Father {
//声明了一个external类型的函数bark
    function bark() external pure returns(string memory){
        return "WangWang";
}
//1.合约内部函数externalTest是否可以调用external类型的函数bark?如果不能,请你补充代码使之成功调用。
    function externalTest() public view returns(string memory){
        return bark();
    }
}
//2.继承的合约son是否可以调用父类Fater里面的external类型的函数bark?如果不能,请你补充代码使之成功调用。
contract son is Father{
    function extTest() public returns(string memory){
        return bark();
    }
}
//3.外部合约是否可以调用合约Fater里external类型的函数bark,如果可以,请你补充代码,使之成功调用。
contract exterTest{
    		//**1**
}
// 示例2
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract scopeTest {
uint public a = 100;
    function test() public view returns (uint) {
        uint a = 8;
        return a;
    }
}

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