solidity 扩展指令Using For(存取款事例)

指令 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);
    }
}

猜你喜欢

转载自blog.csdn.net/suannai11/article/details/140917666