16.函数重载


文档摘要

title: 16. 函数重载 tags: solidity advanced wtfacademy overloading WTF Solidity极简入门: 16. 函数重载 我最近在重新学 Solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。 推特:@0xAAScience|@WTFAcademy 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity 重载 中允许函数进行重载( ),即名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。注意, 不允许修饰器( )重载。

title: 16. 函数重载 tags: - solidity - advanced - wtfacademy - overloading

WTF Solidity极简入门: 16. 函数重载

我最近在重新学 Solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。

推特:@0xAA_Science@WTFAcademy_

社区:Discord微信群官网 wtf.academy

所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity

重载

Solidity中允许函数进行重载(overloading),即名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。注意,Solidity不允许修饰器(modifier)重载。

函数重载

举个例子,我们可以定义两个都叫saySomething()的函数,一个没有任何参数,输出"Nothing";另一个接收一个string参数,输出这个string

function saySomething() public pure returns(string memory){ return("Nothing"); } function saySomething(string memory something) public pure returns(string memory){ return(something); }

最终重载函数在经过编译器编译后,由于不同的参数类型,都变成了不同的函数选择器(selector)。关于函数选择器的具体内容可参考WTF Solidity极简入门: 29. 函数选择器Selector

Overloading.sol 合约为例,在 Remix 上编译部署后,分别调用重载函数 saySomething()saySomething(string memory something),可以看到他们返回了不同的结果,被区分为不同的函数。

https://www.aiknowledge.cn/images/WTF-Solidity/16-1.webp

实参匹配(Argument Matching)

在调用重载函数时,会把输入的实际参数和函数参数的变量类型做匹配。
如果出现多个匹配的重载函数,则会报错。下面这个例子有两个叫f()的函数,一个参数为uint8,另一个为uint256

function f(uint8 _in) public pure returns (uint8 out) { out = _in; } function f(uint256 _in) public pure returns (uint256 out) { out = _in; }

我们调用f(50),因为50既可以被转换为uint8,也可以被转换为uint256,因此会报错。

总结

这一讲,我们介绍了Solidity中函数重载的基本用法:名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。


发布者: 作者: 转发
评论区 (0)
U