【从0学习Solidity】 16. 函数重载

2023-09-22 11:22:48

【从0学习Solidity】16. 函数重载

在这里插入图片描述

  • 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。
  • 关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!
  • 本文收录于 不写代码没饭吃 的学习汇报系列,大家有兴趣的可以看一看。
  • 欢迎访问我们的微信公众号:不写代码没饭吃,获取更多精彩内容、实用技巧、行业资讯等。您关注的是我们前进的动力!

重载

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),可以看到他们返回了不同的结果,被区分为不同的函数。
16-1.jpg

实参匹配(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中函数重载的基本用法:名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。

在这里插入图片描述

如果这份博客对大家有帮助,希望各位给作者一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。

更多推荐

opencv图像像素类型转换与归一化

文章目录opencv图像像素类型转换与归一化1、为什么对图像像素类型转换与归一化2、在OpenCV中,`convertTo()`和`normalize()`是两个常用的图像处理函数,用于图像像素类型转换和归一化;(1)`convertTo()`函数用于将一个`cv::Mat`对象的像素类型转换为另一种类型。它的基本用法

第8章 MySQL的数据目录

8.1数据库和文件系统的关系像InnoDB、MyISAM这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管理磁盘的又被称为文件系统,所以用专业一点的话来表述就是:像InnoDB、MyISAM这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写

公私钥非对称加密 生成和验证JSON Web Token (JWT)

前言这是我在这个网站整理的笔记,关注我,接下来还会持续更新。作者:神的孩子都在歌唱公私钥非对称加密生成和验证JSONWebToken什么是JSONWebToken(JWT)Java程序中生成和验证JWT代码解析什么是JSONWebToken(JWT)JSONWebToken(JWT)是一种轻量级的身份验证和授权机制,由

【Linux 之二】Ubuntu下开发环境的搭建(NFS \ SSH \ FTP \ Smba \ ...)

目前正在进行Linux相关项目的开发,而我的Linux开发是在Ubuntu(版本20.04)下进行的,为此需要搭建很多Linux相关的开发环境,方便工作的进行。这里主要是对各种开发环境的搭建做一个总结记录,方便后面查阅,也方便在Linux开发之路上遇到困难的各位同仁。好了,废话不多说,直接罗列各种开发环境的安装步骤等。

Java 多线程

目录线程相关概念线程基本使用1.继承Thread类,重写run方法示例代码程序示意图2.实现Runnable接口,重写run方法示例代码*应用案例代码理解3.继承Threadvs实现Runnable的区别4.多线程售票问题引出同步互斥问题5.线程终止代码示意图线程常用方法第一组示例代码第二组示例代码用户线程和守护线程示

Google Guava精讲(一)-Guava是什么?能做什么?

https://mvnrepository.com/artifact/com.google.guava/guava作为Java栈的测试工程师,在写代码时候会频繁遇到字符串处理、缓存、反射等问题,我们最常规的做法就是,为了使原生的JDK方法好用,通常是做了一层又一层封装,然后提供整个测试团队使用,而渐渐的就形成了自己的J

什么是葡萄酒结构,结构型葡萄酒好吗?

葡萄酒爱好者使用许多复杂的术语来描述葡萄酒的味道,有些是不言自明的,有些则有点模糊。如果你不是葡萄酒专家,你可能很难理解这个葡萄酒术语的全部含义。其中一个术语是葡萄酒结构,那么葡萄酒结构是什么意思呢?而结构酒是好东西吗?葡萄酒的结构是指葡萄酒的主要特征之间的相互作用,包括酒体、酒精度、酸度、单宁和甜度,葡萄酒的结构决定

73、SpringBoot 直接整合 JDBC

★SpringBoot可直接整合JDBC来操作数据库——很少这么干,这么干就意味着使用最原始的方式来操作数据库。对于对于极小的项目,直接整合JDBC无需添加JPA、Hibernate等ORM框架。★JdbcTemplate为项目添加spring-boot-starter-jdbc.jar依赖(注意没有data)。——这

CTF--攻防世界-杂项入门第一课

这是第一次接触杂项这个方向,所以就是根据writeup解的题,没有什么自己的思路,只是写一篇文章来记录一下解题过程。下载题目后拿到一张图片,确实挺迷惑的,不知从何下手,根据大家的思路都是看看有没有隐写,这里就需要用到一个很好用的工具--StegSolve这里就穿插一下这个工具的下载以及安装http://www.caes

MySQL进阶—从零到入土

1.存储引擎1).建表时指定存储引擎CREATETABLE表名(字段1字段1类型[COMMENT字段1注释],......字段n字段n类型[COMMENT字段n注释])ENGINE=INNODB[COMMENT表注释];2).查询当前数据库支持的存储引擎showengines;A.查询建表语句---默认存储引擎:Inn

设计模式:状态模式(C++实现)

状态模式(StatePattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为。状态模式将对象的行为封装在不同的状态类中,使得状态的切换对于对象来说是透明的。下面是一个简单的C++状态模式的示例:#include<iostream>//抽象状态类classState{public:virtualvoidh

热文推荐