为了避免未来可能引入不兼容的编译器所编译,源文件需要在开头标识合约的版本,例子:
pragma solidity ^0.5.0;
这样源文件既不允许低于0.5.0版本的编译器编译,也不允许高于(包含)0.6.0版本的编译器编译。
Solidity同样支持从不同的文件里导入方法,其语法非常像JavaScript的ES6标准。 全局导入
import "filename"
此语句将从 “filename” 中导入所有的全局符号到当前全局作用域中。
import * as symbolName from "filename";
创建一个新的全局符号 symbolName,其成员均来自 "filename" 中全局符号。
import {symbol1 as alias, symbol2} from "filename";
创建新的全局符号 alias 和 symbol2,分别从 "filename" 引用 symbol1 和 symbol2。
另一种语法不属于 ES6,但或许更简便:
import "filename" as symbolName;
这条语句等同于 import * as symbolName from "filename";
上文中的 filename 总是会按路径来处理,以/
作为目录分割符、以 .
标示当前目录、以 ..
表示父目录。 当 .
或 ..
后面跟随的字符是 /
时,它们才能被当做当前目录或父目录。 只有路径以当前目录 .
或父目录 ..
开头时,才能被视为相对路径。
用 import "./x" as x;
语句导入当前源文件同目录下的文件 x
。 如果用 import "x" as x;
代替,可能会引入不同的文件(在全局 include directory 中)。
可以使用单行注释//
和多行注释/*...*/
// 这是一个单行注释。
/*
这是一个
多行注释。
*/
举个例子
pragma solidity ^0.5.0;
/** @title 形状计算器。 */
contract tinyCalculator {
/** @dev 求矩形表明面积与周长。
* @param w 矩形宽度。
* @param h 矩形高度。
* @return s 求得表面积。
* @return p 求得周长。
*/
function rectangle(uint w, uint h) public pure returns (uint s, uint p) {
s = w * h;
p = 2 * (w + h);
}
}