指令 using A for B 可用于将函数( A) 作为运算符附加到用户定义的值类型 或作为成员函数附加到任何类型( B)。
成员函数将调用它们的对象作为第一个参数 (类似于 Python 中的 self 变量)。 运算符函数将接收操作数作为参数。
英语部分
using 使用;利用,使用(use 的现在分词形式)
基本语法
using LibraryName for TypeName;
另一种语法
一个函数列表,可选择分配运算符名称 (例如 using {f, g as +, h, L.t} for uint)。
如果未指定运算符,则该函数可以是库函数或自由函数, 并将其作为成员函数附加到类型。
否则,它必须是一个自由函数,并成为该类型上该运算符的定义。
存取款事例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
struct Div {
mapping(address => uint256) val;
}
function addVal(Div storage self, address ar, uint256 va) {
self.val[ar] = self.val[ar] + va;
}
function subVal(Div storage self, address ar, uint256 va) {
self.val[ar] = self.val[ar] - va;
}
function getVal(Div storage self, address ar) view returns (uint256){
return self.val[ar];
}
using {addVal,subVal,getVal} for Div;
contract Name {
Div div;
function add(uint256 va) public {
div.addVal(msg.sender, va);
}
function sub(uint256 va) public {
div.subVal(msg.sender, va);
}
function get() public view returns (uint256) {
return div.getVal(msg.sender);
}
}