Solidity中函数修饰符,状态、全局变量,常量

函数修饰符

定义一个函数例如:

function add(uint x,uint y) external  pure returns (uint){
        return x+y;
    }

 

  其中“external”指该函数为外部读取函数,在合约外访问时用“external”,合约内部调用该函数是需要用“this.函数名”

如果需要读取链上的数据来使用,则

external  view

  如果将“view”改成“pure”则表示该函数不读取也不修改任何链上数据,只有局部变量或者空

状态变量

在函数外定义,可以在函数内修改。

  uint public i;
    bool public b;
    address public myAddress;
    function foo() external {
        uint x=123;
        bool f=false;
        //部署后点以下foo三个值都发生改变只变一次
        x += 456;
        f = true;
        i=123;
        b=true;
        myAddress = address(1);
    }

其中“i、b、myadress”是状态变量。

全局变量

不需要定义声明,可直接调用,下列代码中的“msg.sender”、“block.timestamp”、“block.number”。

function foo() external view returns (address,uint256,uint256){
        address sender = msg.sender; 
        //调用该函数的地址是什么,是谁调用的“msg.sender”
        uint times =  block.timestamp;
        //“block.timestamp”指的是区块的时间戳
        uint blockNum = block.number;
        //“block.number”指的是当前的区块编号

        return (sender,times,blockNum);
    }

确保在函数命名时的返回值类型与函数内的返回值相对应。

局部变量

定义在函数里,随着使用结束而失效

function bar() external pure returns(uint){
    uint xx = 1;
    uint yy = 3;
    uint zz = xx + yy;
    return(zz);
}

  

常量

一句话:

//如果将“uint256 public x;”该成“uint256 public constant x;”即实现状态变量变为常量,读取两者消耗的“gas”值不同

  

 

posted @ 2024-07-11 16:27  昏睡的云雪  阅读(2)  评论(0编辑  收藏  举报