《论语·泰伯》有言“不在其位,不谋其政”。大意是不在那个职位上,就不去考虑那个职位上的事。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;
}
}
下面是本次实验所配套的视频教程:
