// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//库合约的建立
//类似于php中的引入类,js中的库
//部署合约的时候,只需要部署合约即可,无需部署库
//根据需求,设计库
library Libs {
function maxRes(uint x,uint y) internal pure returns (uint){
return x > y ? x : y;
}
//根据上面的数组查找合约,写一个对应的库
//Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.
//这里会有一个报错,就是return 返回i 但是在判断之外,没有return,所以要在 函数中也要uinit 给个名字inde,如果不添加idne
//可以在判断之外给一个模拟固定返回
function getarr(uint[] memory arr,uint x) internal pure returns (uint inde){
for (uint i \= 0;i < arr.length;i++){
if (arr[i] \== x){
return i;
}
}
//return 0; 这就是模拟固定返回
revert("not find");//可以给一个报错
}
}
//先设计一个合约,要调用库里的方法寻找最大值uint
contract max {
function getMax(uint x, uint y) external pure returns (uint){
return Libs.maxRes(x,y);
}
}
//在设计一个合约,要在数组中找到指定值
contract nsdsf {
//引入,以后此类库都将作为数组处理函数的意思,这是另外一种调用写法
using Libs for uint[];
uint[] array \= [54,98,6,8,98,89];
function find() external view returns (uint index){
return array.getarr(8);
}
}
//根据上面的数组查找合约,写一个对应的库