Solidity编程 三 之 资源文件的组成

3.1 版本语句

源文件可以用版本语句拒绝高版本编译器编译。其中一些高版本可能引入了不兼容的特性,导致编译后出现不可预知的结果。我们希望把这种版本变化控制在最小范围内,同时尽量要求语法和语义同步修改,这个要求很难达到。所以,我们需要去阅读每个版本的修改日志,这些版本都是以 0.X.0或是X.0.0来命名。 版本语句使用如下:

pragma solidity ^0.4.0;

这样的源文件不会被0.4.0以前的编译器编译,同时在0.5.0版本以上(包括0.5.0)编译器上也不能编译(使用了 ^ 进行约束)。这个因为在0.5.0之前,不会出现很大的改变,所以我们可以确信我们的代码可以按照预期的结果执行。

3.2 引入其他资源文件

3.2.1 语法

Solidity支持import导入资源文件,这点和JavaScript(ES6)很像,但是不支持默认导出的功能 import语句格式如下,这是全局有效的:  

import "filename";

  该语句把”filename”全局导入当前工程中,同时也全局导入”filename”里包含的所有全局导入文件。支持向后兼容性

 import * as symbolName from "filename";

新建一个名为 symbolName的全局符号,它包含了”filename”里的所有全局符号

import {symbol1 as alias, symbol2} from "filename";

从”filename”文件里导入symbol1 和symbol2的全局符号,同时给symbol1取别名为alias

另外一个不是ES6语法,但是很方便

import "filename" as symbolName;

  这语句等同于

import * as symbolName from "filename";

3.2.2 路径

  上面提到的”filename”以 / 为目录分隔符,.为当前目录,…为上一级目录。如果.和…后面跟的是除了/之外的字符,不会作为一个文件目录来对待。所以的目录默认都是绝对路径,除非他们以.或是…开头。 导入当前目录下的文件x,可以使用

 import "./x" as x;

  如果使用

 import "x" as x;

  引用的是不同的文件(全局使用”include directory”)。 文件路径的引用取决于不同编译器。一般来说,目录结构是不需要严格对应于你的本地文件系统的,它可以映射到ipfs,http或是git

3.2.3 编译器使用

  编译器的使用不仅可以指定如何查找路径的首个元素,而且还可以指定路径前缀映射。所以如:

 github.com/ethereum/dapp-bin/library 

  路径就可以映射到本地路径

 /usr/local/dapp-bin/library

  编译器就可以从本地路径中读取所需要的文件。如果同时存在多种映射关系,最长路径会被优先使用。这就允许使用备用映射如 "" 映射到 "/usr/local/include/solidity" 这些映射还可以根据不同的情况允许用户配置包,比如导入不同版本的同名library。

Solc

对于solc(一种命令行编译器)来说,可以用

 context:prefix=target 

  来提供这种映射关系。context:和=target都可选。所有映射成正确的文件都会编译,包括所有依赖文件。这是一种完全向后兼容机制,所有导入的文件中,如果是以 定义好的“prefix”字段开头的,都会被直接替换成 target定义的值。 例如:如果clone github.com/ethereum/dapp-bin/ 到 本地的 /usr/local/dapp-bin,可以使用如下的import语句

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 

  如果你是使用了一个很老版本dapp-bin的一些模块代码时,老版本的dapp-bin从 /usr/local/dapp-bin_old check out出来,可以如下使用:

 solc module1:github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/       \ module2:github.com/ethereum/dapp-bin/=/usr/local/dapp-bin_old/ \ source.sol

  这样所有module2的import都指向到老版本,二module1的都指向新的版本。 注意solc只允许包含特定的目录:明确指定文件的目录或是映射目标中的目录。如果想允许绝对包含,可以添加重新映射 =/ 如果多重重新映射指向一个有效文件,优先使用包含最长重新映射前缀

Remix

Remix提供了github的自动重映射功能,可以自动从网络上获取所需要的资源文件。可以如下导入映射

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

3.2.4 注释

  提供了单行注释  (//) 和多行注释 (/*...*/)

  

时间: 2024-10-25 10:34:40

Solidity编程 三 之 资源文件的组成的相关文章

Delphi 资源文件( .res)

一.    现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用.资源是程序的一部分,程序要正常运行就离不了资源文件.但是它是不可执行代码.      为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件.它可以把我们程序中所需要的资源整合到一个资源文件(.RES)下来.在编译应用程序时直接编译进了可执行程序里,成为应用程序的整合体.      这样做的好

资源文件制作

delphi资源文件制作及使用详解 摘自:http://www.ej38.com/showinfo/delphi-131567.html 一.引子:现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用.资源是程序的一部分,程序要正常运行就离不了资源文件.但是它是不可执行代码.为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件.它可以把我们程序中所需要的资

delphi资源文件制作及使用详解

一.引子:现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用.资源是程序的一部分,程序要正常运行就离不了资源文件.但是它是不可执行代码.为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件.它可以把我们程序中所需要的资源整合到一个资源文件(.RES)下来.在编译应用程序时直接编译进了可执行程序里,成为应用程序的整合体.这样做的好处是:1.由于定位资源比在

delphi 资源文件详解

delphi资源文件详解 一.引子: 现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用.资源是程序的一部分,程序要正常运行就离不了资源文件.但是它是不可执行代码. 为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件.它可以把我们程序中所需要的资源整合到一个资源文件(.RES)下来.在编译应用程序时直接编译进了可执行程序里,成为应用程序的整合体. 这样

Android资源文件简介

Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源文件; -- 界面布局文件 : 在res/layout目录下定义, 用于定义Android中界面的显示样式; -- Java源码文件 : Android程序的逻辑实现, 程序主体; -- 资源文件 : 各种XML文件, 可以定义图片等资源, 以及各种图片, 音频, 视频, 3d模型等资源; (2)

Java国际化资源文件的选择

(一)在Java环境下有以下资源文件: message_zh_CN.properties message_zh_TW.properties message_zh.properites message.properties 如果Locale为zh_CN,查找资源文件的顺序为: message_zh_CN.properties message_zh.properites message.properties 如果上述三个资源文件都不存在,则抛出异常,不会使用message_zh_TW.propert

关于C#资源文件操作的总结

// 在这里,我来总结一下关于资源文件的相关操作. //1. 比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 // 比较典型的做法是通过代码程序集加载指定资源 // 如下通过Assembly 的静态方法GetExecutingAssembly() 得到程序集 // 还有很多方式可以得到代码程序集 C#代码                           System.Reflection.Assembly asm = System.Reflection.Assembly.Get

静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)

原文:静态资源文件自动压缩并替换成压缩版本(大型网站优化技术) 这一次,我总结和分享一项大型网站优化技术,那就是在项目中自动压缩静态资源文件(css.js),并让网站自动加载压缩后的资源文件.当然,这项技术在雅虎35条前端优化建议里也有记载,但它那只是给出一个理论的方案而已,并且采用的是外部压缩工具去压缩,而在我的项目中,是直接通过自己的程序自动化去压缩所有css.js文件,然后让页面直接加载所压缩后的资源,接下来直接进入主题. 本次实验使用的是PHP脚本语言,版本是PHP5.6,是在LINUX

Android资源文件说明

一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源文件; -- 界面布局文件 : 在res/layout目录下定义, 用于定义Android中界面的显示样式; -- Java源码文件 : Android程序的逻辑实现, 程序主体; -- 资源文件 : 各种XML文件, 可以定义图片等资源, 以及各种图片, 音频, 视频, 3d模型等资源; (