今天來延續一點昨天聊到的 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 。