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();//报错
}
}
下面是本次实验所配套的视频教程:
