solidity之函数参数和返回变量

函数接受有类型的参数作为输入,并且可能与许多其他语言不同,也可以返回任意数量的值作为输出。(英文好的小伙伴可参考原汁原味官方文档)函数参数函数参数的声明方式与变量相同,未使用的参数的名称可以省略。例如,如果你想让合约接受一种带有两个整数的外部调用,你可以使用如下方法:// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.4.16 <0.9.0;contract Simple { uint sum; fun

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

函数参数

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

// SPDX-License-Identifier: GPL-3.0pragma 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.0pragma 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.0pragma 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)可以用来返回多个值。组件的数量必须与返回变量的数量相同,并且它们的类型必须匹配(可能存在隐式转换)。

给TA打赏
共{{data.count}}人
人已打赏
web3.0区块链推广

以太坊Dapp开发通过web3.js调用智能合约

2021-11-28 10:37:26

区块链推广

区块链cryptogame游戏开发 cryptogame区块链游戏开发成本

2021-11-28 10:37:29

重要说明

本站资源大多来自网络,如有侵犯你的权益请联系管理员 区块链Bi站  或给邮箱发送邮件834379394@qq.com 我们会第一时间进行审核删除。 站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!


如果你遇到支付完成,找不到下载链接,或者不能下载,或者解压失败,先不要忙,加客服主的QQ:834379394 (客服有可能有事情或者在睡觉不能及时的回复您,QQ留言后,请耐心等待即可!)

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索