modifier的定义
官方文档:modifier可以改变函数的行为。可以被继承和重写。

其实modifier被用于最多的是行为检查,这样可以使得减少检查代码的复用以及让代码看起来更简介易懂。比如,检查调用者是否有权限执行这个函数,传入的参数是否有错误等等。但是modifier不仅仅于此。通过一下一个例子来熟悉了解一下modifier的用法:

// 建立了一个NoteBook的合约,只有NoteBook的拥有者才可以修改其内容record
contract NoteBook{

string public record;    // NoteBook的内容
address owner;          // NoteBook的拥有者constructor() {owner = msg.sender;
}// 修改record的内容
function changeRecord(string memory _record) public isOwner {record = _record;
}// 函数修改器:判断是否是NoteBook的
modifier isOwner{require(msg.sender == owner, "You are not the owner of this NoteBook");_;
}

}
上述例子中,我们通过关键字 modifier 后面接函数修改器名 NoteBook 来定义一个modifier。在上述定义的modifier中如果调用者不是拥有者则会停止执行接下来的代码,并在控制台输出自定义的原因。如果是的话则执行到 _ 处,_ 代表使用该modifier的函数体,这里即为changeRecord 函数的函数体。在执行changeRecord 函数前先会使用isOwner进行检查,没有问题后才会执行。

modifier对函数参数的操作
执行函数时有时候也会对函数的参数有所要求,为了让函数内的代码更简洁我们便可以写在modifier中。那如何对函数参数进行检查呢?这个和函数的操作一样,调用时传参便可。看如下例子:

// 这个合约可以执行运算
contract Operation{

// 除法运算
function division(uint256 opt1, uint256 opt2) public checkZero(opt2) pure returns(uint256){return opt1 / opt2;
}// 检查除数是否为0
modifier checkZero(uint256 divisor) {require (divisor != 0, "divisor can't be 0");_;
}

}
在以上代码中我们需要做的是检查除法运算中的除数是否为0,若是0则中止运行,并给予提示。代码简单就不啰嗦了。

当然modifier还可以对storage中的变量进行检查,

modifier的执行顺序
一个函数可能需要做多个检查,那么我们可以写多个modifier,调用时只需将每个modifier以空格隔开。而检查顺序也就是modifier们的排列顺序。

但还有一种可能会迷惑大家的写法:

contract modifierOder {
address owner;
uint256 a;

constructor() {owner = msg.sender;
}function test(uint num) public checkPara(num) returns(uint256) {a = 10;return a;
}// 修改a
modifier checkPara(uint number) {a = 1;_;a = 100;
}

}
如以上代码所示:在 _后又有一句代码a = 100 。函数执行完return后,后面的代码则不再执行,但是在modifier中,执行完函数体 _ 还会接着执行 a = 100 这条语句。所以尽管函数返回的a 的值为10,但是最后a的值变成了100。

以上所有代码都是给予solidity 0.7.x的编译器
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

solidity的函数修改器(modifier)相关推荐

  1. solidity modifier函数修改器 智能合约开发知识浅学(三)

    环境说明: Ide:在线remix Solidity IDE 语言:solidity solidity 版本号:0.4.20 Tip:如果一点都不懂的建议从头开始看 运行结果截图我不赘述,所有合约代码 ...

  2. 【solidity】函数修饰器(Function Modifiers)

    修饰符可用于以声明方式更改函数的行为.例如,您可以使用修饰符在执行函数之前自动检查条件. 检查调用者权限 // SPDX-License-Identifier: GPL-3.0 pragma soli ...

  3. Blender2.8入门教程(1): 物体操作、物体编辑、修改器Modifier

    目录 说明及效果 快捷键说明 1. 物体基本操作 2. 物体编辑 3. 调整视图 构建模型 A. 制作雪糕筒 1. 新建Cylinder Object 2. 调整Cylinder的大小 3. 进入Ed ...

  4. Blender基础:阵列修改器、倒角修改器、镜像修改器

    1.修改器 修改器Modifier,对模型进行修改 相当于一个函数,类似于y=f(x) 演示: 1.选中一个mesh类型的物体 2.修改器属性,添加修改器|倒角修改器   3.点 实时.打开/关闭修改 ...

  5. Blender基础:曲线修改器、晶格修改器

    目录 1.曲线修改器 2.几个细节 3.半径与倾斜 4.练习锁链 5.晶格 6.晶格修改器 7.练习空间扭曲效果 形变类修改器,使物体产生形变.例如,曲线修改器.晶格修改器 1.曲线修改器 曲线函数修 ...

  6. 植物大战僵尸 php,植物大战僵尸修改器使用方法 PHP __autoload函数(自动载入类文件)的使用方法...

    这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ ...

  7. 奥德赛修改器_我的奥德赛发现最受欢迎的python函数

    奥德赛修改器 介绍(Introduction) The other day while I was running some zip() with some lists through a map() ...

  8. C++编程思想 第1卷 第9章 内联函数 内联函数 访问器和修改器

    一些人进一步访问函数的概念分为访问器 accessor,用于从一个对象读状态 信息和 修改器 mutator 用于修改状态信息. 而且,可以用重载函数为访问器 和修改器提供相同函数名,调用函数的方式决 ...

  9. ethereum(以太坊)(七)--枚举/映射/构造函数/修改器

    pragma solidity ^0.4.10;//枚举类型 contract enumTest{enum ActionChoices{Left,Right,Straight,Still}// 0 1 ...

最新文章

  1. [20170419]bbed探究数据块.txt
  2. 用动画实现android app启动界面的渐变效果
  3. python变量如何使用,python如何使用变量
  4. 后处理没有pui文件怎么打开_UG后处理添加具体步骤
  5. 解决windows指纹登录不灵问题
  6. 郭新华 php,PHP常驻进程编程需知 郭新华 PHPCON2019
  7. java oracle数据库高效分页查询_Oracle学习之分页查询数据
  8. getNextElement( )函数——获取下一个特定的元素节点
  9. 记录一个表,COUNT多列的写法
  10. 冰点文库下载器,文库免费下载(唯一可用的版)
  11. 计算机网络在办公自动化的应用,浅析计算机网络在办公自动化中的作用
  12. win10分屏任务快捷键
  13. 如何正确在CSDN问答进行提问
  14. 补天漏洞响应平台基本介绍
  15. deepstream视频数据流分析工具包安装使用教程
  16. [转]CreateDIBitmap与CreateDIBSection
  17. c c++实现restful api服务 c c++实现http服务
  18. 大数据的四个成功案例(来自IT经理网)
  19. 中国程序员VS美国程序员,太形象了...
  20. Linux 安装VMware Tools(open-vm-tools)实现桌面全屏、跨平台复制等功能

热门文章

  1. MYSQL笔试题(考试题)附带答案
  2. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档)-附录A-C
  3. 苹果手机对html的要求,原神iPhone 8能玩吗?苹果手机最低配置要求一览
  4. C# 终本案件、综合执行人、裁判文书爬虫
  5. Ocr 图文识别技术——基于百度云OCR技术学习与总结
  6. 李兴华内部JAVA培训视频 (难找啊)
  7. 树莓派水星USB无线网卡MW150US配置
  8. 从零开始画自己的DAG作业依赖图(四)--节点连线优化版
  9. 【JAVA长虹键法】第八式 代理模式(23种设计模式)
  10. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP教程...