Solidity进阶:库合约

文章介绍了Solidity编程语言中库函数的概念,它们用于提高代码复用性和降低gas成本。库合约不具备状态变量、继承、接收以太币或被销毁的功能,其函数通常是内部的。示例展示了如何直接通过库合约名称调用以及使用`usingfor`语法来调用库函数。
摘要由CSDN通过智能技术生成

库函数是一种特殊的合约,为了提升solidity代码的复用性和减少gas而存在,使用library定义。库合约一般都是一些好用的函数合集。
库和普通合约主要有以下几点不同:

  • 不能存在状态变量
  • 不能够继承或被继承
  • 不能接收以太币
  • 不可以被销毁
  • 函数可视范围通常为internal
库合约调用
通过库合约名称调用库函数

定义一个库合约,包含一个比较两个数大小的函数:

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

library Math {
    function max(uint x, uint y) internal pure returns(uint) {
        return x > y ? x : y;
    }
}

定义一个普通合约调用库合约,通过库合约名称调用库函数:

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

contract Examples {
    function max(uint x, uint y) external pure returns(uint) {
    	// 通过库合约名称调用库函数
        return Math.max(x, y);
    }
}
使用using for调用

定义一个库合约:

library ArrayFind{
    // 查找数组中指定元素的下标
    function findIdx(uint[] storage arr, uint x) internal view returns(uint) {
        for(uint i=0; i<arr.length; i++) {
            if (arr[i] == x) {
                return i;
            }
        }
        revert("not found");
    }
}

定义一个普通合约,通过using for调用库函数:

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

contract Examples1 {
	// 表示uint[]类型的变量具有ArrayFind库的所有函数功能,使用 变量.函数名来调用
    using ArrayFind for uint[]; 
    uint[] arr = [1,2,3];
    function findIdx(uint x) external view returns(uint) {
        // return ArrayFind.findIdx(arr, x);
        return arr.findIdx(x); // 调用ArrayFind的findIdx函数
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值