Solidity极简入门|第十六讲:库合约 站在巨人的肩膀上

本文介绍了Solidity语言中函数重载的概念,允许同名但参数类型不同的函数共存。实参匹配在调用时匹配函数参数类型,若存在多个匹配项会导致编译错误。此外,文章讲解了库函数的特性,如不能有状态变量、不能继承等,并以String库合约为例,展示了如何将uint256转换为string或16进制string,以及如何通过usingfor指令和直接调用库合约来使用这些功能。
摘要由CSDN通过智能技术生成

重载

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

函数重载

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

3ee826accdca274b2bc9409fae2191a5.jpeg

实参匹配(Argument Matching)

在调用重载函数时,会把输入的实际参数和函数参数的变量类型做匹配。

如果出现多个匹配的重载函数,solidity 文档上说会报错。它给的例子是两个叫 f() 的函数,一个参数为 uint8,另一个为 uint256。文档说如果输入 50,既可以被转换为 uint8,也可以被转换为 uint256,因此会报错。但是我没遇到:

a426147eb02bfa8d0e0b962b150db294.jpeg

库函数

库函数是一种特殊的合约,主要是为了提升 solidity 代码的复用性和减少 gas fee 而存在。库合约一般都是一些好用的函数合集(库函数),由大神或者项目方创作,咱们站在巨人的肩膀上,会用就行了。

1104a0e213b124455363eb26b3f9a275.jpeg

  库合约:站在巨人的肩膀上

他和普通合约主要有以下几点不同:

不能存在状态变量不能够继承或被继承

不能接收以太币

不可以被销毁 

String 库合约

String 库合约是将 uint256 类型转换为相应的 string 类型的代码库,样例代码如下:  

e7e34e7409bc50a71e8b074f9620b046.jpeg

他主要包含两个函数,toString() 将 uint256 转为 string,toHexString() 将 uint256 转换为 16 进制,在转换为 string。

如何使用库合约

我们用 String 库函数的 toHexString() 来演示两种使用库合约中函数的办法。

1. 利用 using for 指令:

指令 using A for B; 可用于附加库函数(从库 A)到任何类型(B)。添加完指令后,库 A 中的函数会自动添加为 B 类型变量的成员,可以直接调用。注意:在调用的时候,这个变量会被当作第一个参数传递给函数:

aace207b2ea97f280d5eb0ac664f0700.jpeg

2. 通过库合约名称调用库函数:

b27a7a075ba4ef59d97bffb34262954e.jpeg

我们部署合约并输入 170 测试一下,两种方法均能返回正确的 16 进制 string 「0xaa」。证明我们调用库函数成功!  

687a2a58d12316c9d58b25161d72c344.jpeg

  成功调用库函数

总结

这一讲,我们用 ERC721 的引用的库函数 String 为例介绍 solidity 中的库函数(Library)。99% 的开发者都不需要自己去写库合约,会用大神写的就可以了。我们只需要知道什么情况该用什么库合约。常用的有:

String:将 uint256 转换为 String

Address:判断某个地址是否为合约地址

Create2:更安全的使用 Create2 EVM opcode

Arrays:跟数组相关的库函数  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值