代码如下所示:
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
先执行了_transfer函数后执行_checkOnERC721Received函数,而后者是为了检测to这个参数是否具备接收erc721 token的资质(主要针对合约账号)。 既然如此为什么不把顺序调过来? 而且把顺序调过来更符合编程规范才对啊。实现函数功能之前,不是应该先校验参数的合法性吗?