🕌
using A for B?(Solidity)
ERC721を読んでいたら、
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract GameItem is ERC721 {
using Counters for Counters.Counter;
......
}
で
using A for B
???
早速、ドキュメントを読む
using A for B; という指示はライブラリのファンクション( A というライブラリから)をどんな型(B)にも加えるのに使うことができます。
とのこと。
具体例(ほぼドキュメント通り)
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;
library Set {
struct Num{
uint256 num;
}
function set(Num storage self,uint256 p) public {
self.num=p;
}
}
contract A{
using Set for Set.Num ;
Set.Num n;
function register(uint256 pos) public {
n.num = pos;
}
function get() public view returns (uint256){
return n.num;
}
}
なかなか面白い書き方だったので取り上げてみた
Discussion