当前位置: 首页 > ops >正文

solidity的高阶语法2

1.抽象合约

抽象合约是一种包含至少一个函数但没有任何实现的合约。 这样的合同被用作基础合同。 通常,抽象合约包含已实现的功能和抽象功能。 派生合约将实现抽象函数,并在需要时使用现有函数。

如果派生合约未实现抽象函数,则该派生合约将被标记为抽象。

示例

尝试以下代码来了解抽象合约在 Solidity 中的工作原理。

pragma solidity ^0.5.0;contract Calculator {function getResult() public view returns(uint);
}
contract Test is Calculator {function getResult() public view returns(uint) {uint a = 1;uint b = 2;uint result = a + b;return result;}
}

2.接口

接口类似于抽象契约,使用interface关键字创建。 以下是界面的主要特征。

  • 接口不能有任何需要实现的功能。

  • 接口的函数只能是外部类型。

  • 接口不能有构造函数。

  • 接口不能有状态变量。

  • 接口可以有枚举、结构体,可以使用接口名称点表示法进行访问。

示例

尝试以下代码来了解 Solidity 中的界面如何工作。

pragma solidity ^0.5.0;interface Calculator {function getResult() external view returns(uint);
}
contract Test is Calculator {constructor() public {}function getResult() external view returns(uint){uint a = 1; uint b = 2;uint result = a + b;return result;}
}

3.库

库与合约类似,但主要用于重用。 库包含其他合约可以调用的函数。 Solidity 对库的使用有一定的限制。 以下是 Solidity 库的主要特征。

  • 库函数如果不修改状态就可以直接调用。 这意味着纯函数或视图函数只能从库外部调用。

  • 库无法被销毁,因为它被假定为无状态。

  • 库不能有状态变量。

  • 库不能继承任何元素。

  • 库不能被继承。

示例

尝试以下代码来了解库在 Solidity 中的工作原理。

pragma solidity ^0.5.0;library Search {function indexOf(uint[] storage self, uint value) public view returns (uint) {for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;return uint(-1);}
}
contract Test {uint[] data;constructor() public {data.push(1);data.push(2);data.push(3);data.push(4);data.push(5);}function isValuePresent() external view returns(uint){uint value = 4;//search if value is present in the array using Library functionuint index = Search.indexOf(data, value);return index;}
}

http://www.xdnf.cn/news/20199.html

相关文章:

  • AI工程师对于AI的突发奇想
  • Docker Desktop 安装 Linux(告别传统的虚拟机VMware)
  • Date、BigDecimal类型值转换
  • 残差去噪扩散模型
  • 字节跳动OmniHuman-1.5发布:单图+音频秒变超真实视频,AI数字人技术再升级
  • HOT100--Day13--104. 二叉树的最大深度,226. 翻转二叉树,101. 对称二叉树
  • Docker入门到精通:从零基础到生产部署
  • 如何在路由器上配置DHCP服务器?
  • 本体论中的公理与规则——从经典逻辑到神经符号融合的演进
  • Hive on Tez/Spark 执行引擎对比与优化
  • AI浪潮下,人类创造力的“危”与“机”
  • 2026届大数据毕业设计选题推荐-基于大数据旅游数据分析与推荐系统 爬虫数据可视化分析
  • JAVA基本文件操作
  • 【74页PPT】MES简介(附下载方式)
  • TensorFlow 面试题及详细答案 120道(101-110)-- 底层原理与扩展
  • C++笔记之软件设计原则总结
  • Lua > Mac Mini M4安装openresty
  • 基于Transformer 实现车辆检测与车牌识别(一)
  • disable CASCADE主键失败 ORA-2297 And ORA-2433
  • MCAP :机器人数据容器的全面实践指南
  • 区块链是什么
  • UE5 图表、函数与宏的区别与选择(蓝图折叠功能详解)
  • 【iOS】push 和 present
  • 什么时候用no,什么时候用non,什么时候用not?
  • 京东商品属性API数据解析:颜色、尺寸与材质
  • 【代码随想录算法训练营——Day4】链表——24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II
  • 操作系统基本概念.1
  • Day 47 注意力热图可视化
  • 工作后的总结和反思4
  • SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)