Solidity 语言学习(2)—— Solidity智能合约文件结构

本文介绍Solidity合约版本声明、编译器解析机制及如何正确引用其他源文件的方法。涉及不同编译器下的文件前缀映射、命名空间引入、路径配置等内容。

版本申明

pragma solidity   ^0.4.0;

说明:
1 版本要高于0.4才可以编译
2 表示高于0.5的版本则不可编译,第三位的版本号但可以变,留出来用做bug可以修复(如 0.4.1的编译器有bug,可在0.4.2 修复,现有合约不用该代码)。

引用其他源文件

全局引入

import ”filename“;

自定义命名空间引入

import * as symbolName from "filename"

非es6兼容的简写语法

import "filename" as symbolName

等同于上述

import * as symbolName from ”filename“

关于路径

引入文件路径时要注意,非 . 打头的路径会被认为是绝对路径,所以要引用同目录下的文件使用

import “./x" as x

也不要使用下述方式,这样会是在一个全局的目录下

import "x" as x;

为了会有这个区别,是因为这取决于编译器,如果解析路径,通常来说目录层级结构并不与我们本地的文件一一对应,它非常有可能是通过ipfs,http,或git建立的一个网络上的虚拟目录。

编译器解析引用文件机制

各编译器提供了文件前缀映射机制。

  1. 可以将一个域名下的文件映射到本地,从而从本地的某个文件中读取
  2. 提供对同一实现的不同版本的支持(可能某版本的实现前后不兼容,需要区分)
  3. 如果前缀相同,取最长
  4. 有一个”fallback—remapping“机制,空串会映射到”/usr/local/include/solidify”

solc编译器

命令行编译器,通过下述命令命名空间映射提供支持

context:prefix=target

上述的context: 和 =target 是可选的。所有 context 目录下的以 prefix开头的会被替换为 target。
举例来说,如果你将 github,com/ethereum/dapp-bin 拷到本地的 /usr/local/dapp-bin , 并使用下述方式使用文件

import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol" as it_mapping;

要编译这个文件,使用下述命令

solc github.com/ethereum/dapp-bin = /usr/local/dapp-bin source.sol

需要注意的是solc仅仅允许包含实际存在的文件。它必须存在于你重映射后目录里,或其子目录里。如果你想包含直接的绝对路径包含,那么可以将命名空间重映射为 =\(这里不是很懂)
备注:如果有多个重映射指向同一个文件,那么取最长的那个文件。

browser-solidity 编译器 (现在是Remix)

browser-solidity 编译器默认会自动映射到github上,然后自动从网络上检索文件。比如:可以通过下述方式引入一个迭代包:

import "github.com/ethereum/dapp-bin/library/iterable_mapping.sol" as it_mapping

代码注释

两种方式,单行 // 或多行 /*...*/

文档注释

写文档用.三个斜杠 ///或者 /** ... */,可使用Doxygen语法,以支持生成对文档的说明,参数验证的注解,或者是在用户调用这个函数时,弹出来的确认内容。

 pragma solidity ^0.4.0;
 /** @title Shape calculator. */
 contract shapeCalculator {
     /**
     *@dev calculate a rectangle's surface and perimeter
     *@param w width of the rectangles
     *@param h height of the rectangles
     *@return s surface of the rectangles
     *@return p perimeter of the rectangles
     */

      function rectangles(uint w, uint h) returns (uint s ,uint p){
           s = w * h;
           p = 2* ( w + h);
     }
}
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值