solidity之函数参数和返回变量

函数接受有类型的参数作为输入,并且可能与许多其他语言不同,也可以返回任意数量的值作为输出。(英文好的小伙伴可参考原汁原味官方文档)

函数参数

函数参数的声明方式与变量相同,未使用的参数的名称可以省略。例如,如果你想让合约接受一种带有两个整数的外部调用,你可以使用如下方法:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract Simple {
    uint sum;
    function taker(uint _a, uint _b) public {
        sum = _a + _b;
    }
}

函数参数可以被赋值,用作任何其他局部变量。另外solidity中对于函数参数命名有一定的规范(使用‘_’下划线前缀),这也是代码编程的最佳实践。

外部函数不能接受多维数组作为输入参数。如果您通过在源文件中添加 pragma abicoder v2 来启用 ABI coder v2 ,则此功能是可能的。内部函数可以在不启用该特性的情况下接受多维数组。

 返回变量

函数返回变量在关键字returns之后用与函数参数相同的语法声明。例如,假设你想返回两个结果:作为函数参数传递的两个整数的和与乘积,那么你可以使用如下方法:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract Simple {
    function arithmetic(uint _a, uint _b)
        public
        pure
        returns (uint o_sum, uint o_product)
    {
        o_sum = _a + _b;
        o_product = _a * _b;
    }
}

返回变量的名称可以省略。返回变量可以被用作任何其他局部变量,并使用其默认值进行初始化,直到(重新)赋值为止。你可以显式地赋值给返回变量,然后保持上述函数不变,或者你可以直接用return语句提供返回值(一个或多个):

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract Simple {
    function arithmetic(uint _a, uint _b)
        public
        pure
        returns (uint o_sum, uint o_product)
    {
        return (_a + _b, _a * _b);
    }
}

如果使用提前返回来离开具有返回变量的函数,则必须在使用return语句的时提供返回值。

不能从非内部函数返回某些类型,特别是多维动态数组和结构体。如果你通过添加 pragma abicoder v2 来启用ABI coder v2; 对于您的源文件,可以使用更多类型,但mapping类型仍然局限于单个合约内,您不能传输它们。

返回多个变量值 

当一个函数有多个返回类型时,语句返回(v0, v1,…, vn)可以用来返回多个值。组件的数量必须与返回变量的数量相同,并且它们的类型必须匹配(可能存在隐式转换)。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>