前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >四、函数修改器《2022 solidity8.+ 版本教程到实战》

四、函数修改器《2022 solidity8.+ 版本教程到实战》

作者头像
1_bit
发布2022-09-29 10:38:56
2900
发布2022-09-29 10:38:56
举报
文章被收录于专栏:我的知识小屋

一、函数修改器 modifier

在 solidity 中有一个函数修改器可作为前置、中置或者后置方法,有点像 ASP.NET 中的母版页(最起码差不多十年不碰了,不懂还有没有这个概念),又有点像 ThinkPHP 中的前置方法,可以在指定某个函数调用前、中执行该函数,下面是一个示例:

代码语言:javascript
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{

   modifier checkAge(uint val){
       require(val<10,"Age < 10");
       _;
   }
   modifier checkHeight(uint val){
       require(val>260,"Height < 260");
       _;
   }

   function osVal(uint age,uint height) external pure checkAge(age) checkHeight(height){
       age+=1;
   }
}

以上代码中使用 modifier 创建了函数修改器,modifier 之后是对应的函数修改器名称,可以接收参数或者不接收参数,其中的 “_;” 表示使用这个修改器的函数代码位置,例如:

代码语言:javascript
复制
modifier checkHeight(uint val){
       require(val>260,"Height < 260");
       _;
   }

在被 osVal 方法调用后,osVal 方法中代码的位置就等于在“_;”位置进行填充。在 osVal 中使用这些修改器只需要再其后说明即可,并且可以传入对应的参数,调用后效果如下:

在这里插入图片描述
在这里插入图片描述

“三明治”用法:

代码语言:javascript
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{
    uint public age=0;
    modifier sandwich(){
        age+=1;
        _;
        age+=1;
    }

    function osVal() external sandwich(){
        age+=1;
    }
}

三明治用法就是用于中间:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、函数修改器 modifier
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档