0
点赞
收藏
分享

微信扫一扫

以太坊智能合约语言Solidity - 5 函数

5. 函数

5.1 函数重载

函数不能重名

函数的不同不以返回值类型不同为依据,但是参数类型或参数数量不一样,则可以被认为是不同的函数,可以被重载。另外int160和address是同一种类型,不能重载

但是重名函数怎么调用呢?编译器能自动判断就会自动判断,不能判断则会报错

5.2 函数命名参数

pragma solidity ^0.4.0;

contract funcParam{

    uint public num;
    string public name;

    //通过输入函数参数为状态变量赋值
    function setParam(uint _num,string _name) {
        num = _num;
        name = _name;
    }
    //调用赋值函数
    function Test(){
        setParam({_num:100, _name:"xiaoyu"});
    }
    //调用赋值函数
    //因为参数是显式指定的,所以顺序并不会影响赋值
    function Test2(){
        setParam({_name:"xiaoxia", _num:200});
    }
    //不显式指定
    function Test4(){
        setParam(10,"zhengjianxun");
    }
}

5.3 返回值特性

返回值的几种规范写法如下

pragma solidity ^0.4.0;

contract funcReturn{

    // 返回值可以指定名称
    // 10
    function returnTest() returns(uint mul) {
        uint a = 10;
        return a;
    }

    // 100
    function returnTest2() returns(uint mul) {
        mul = 100;
    }

    //会优先返回 return后面的值
    // 100
    function returnTest3() returns(uint mul) {
        uint a = 10;
        mul = 100;
        return a;
    }

    // 1
    function returnTest4() returns(uint mul) {
        uint a = 10;
        return 1;
    }

    //可以返回多个值
    // 6,8
    function returnTest5(uint a,uint b)view returns(uint add,uint mul) {
        add = a+b;
        mul = a*b;
    }

    //如下这种写法也是可以的,其实返回值的名称和return中的名称无关,因此我们甚至可以实现交换
    // 6,8
    function returnTest6(uint a,uint b)view returns(uint add,uint mul) {
        return(a+b,a*b);
    }
}

5.4 变量的生命周期与作用域

状态变量可以和函数内部同名的变量同时存在,修改函数内部变量并不会影响状态变量。另外,一旦变量作为参数名称,函数内部不能再定义同名变量

举报

相关推荐

0 条评论