今天來延續一點昨天聊到的 libraries 的另一個應用 using-for
using-for 的用法,先來看看下面範例
這是從 官網,參考的一個範例
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;
//定義一個 Data struct 裏面的有一個 mapping 的屬性
struct Data { mapping(uint => bool) flags; }
//這邊做了一些 mapping 的新增刪除的方法
library Set {
function insert(Data storage self, uint value)
public
returns (bool)
{
if (self.flags[value])
return false;
self.flags[value] = true;
return true;
}
function remove(Data storage self, uint value)
public
returns (bool)
{
if (!self.flags[value])
return false;
self.flags[value] = false;
return true;
}
}
contract C {
using Set for Data; //這邊把 Set 指定給 Data
//宣告一個 Data型別的變數 叫做 knowValues
Data knownValues;
function register(uint value) public {
//這邊就可以直接使用 Insert的方法
require(knownValues.insert(value));
}
}
這邊再補充一下,如果要從別的檔案載入 libraries ,就需要用到 import
這個指令,看一下下面的範例
import “filename”;
透過上述語法,就可以引入其他檔案的合約 & libraries 。