源文件包括任意數(shù)量的合約定義和include指令
引入其他源文件
Solidity支持 import語(yǔ)句,非常類似于JavaScript(ES6),雖然Solidity不知道“缺省導(dǎo)出”的概念。
在全局層次上,你可以用下列形式使用import語(yǔ)句
import "filename";?
將會(huì)從"filename"導(dǎo)入所有的全局符號(hào)(和當(dāng)前導(dǎo)入的符號(hào))到當(dāng)前的全局范圍里(不同于ES6,但是Solidity保持向后兼容)
**import**?*****?as symbolName from "filename";
創(chuàng)立了一個(gè)全局的符號(hào)名?symbolName,其中的成員就來自“filename”的所有符號(hào)
import {symbol1 as alias, symbol2} from “filename”;?
?將創(chuàng)立一個(gè)新的全局變量別名:alias 和 symbol2,? 它將分別從"filename" 引入symbol1 和 symbol2
另外,Solidity語(yǔ)法不是ES6的子集,但可能(使用)更便利
import “filename” as symbolName;?
? 等價(jià)于 import * as symbolName from “filename”;.
在上面,文件名總是用/作為目錄分割符,. 是當(dāng)前的目錄,.. 是父目錄,路徑名稱不用.開頭的都將視為絕對(duì)路徑。
從同一個(gè)目錄下import 一個(gè)文件 x 作為當(dāng)前文件,用??import ”./x” as x;? 如果使用?
import “x” as x;??? 是不同的文件引用(在全局中使用"include directory"),。
當(dāng)編譯器啟動(dòng)時(shí),不僅可以定義如何找到第一個(gè)元素的路徑,也可能定義前綴重映射的路徑,如?github.com/ethereum/dapp-bin/library將重映射到 /usr/local/dapp-bin/library ,編譯器將從這個(gè)路徑下讀取文件。? 如果重映射的keys是前綴, (編譯器將嘗試)最長(zhǎng)的路徑。允許回退并且映射到“/usr/local/include/solidity”。
solc(行命令編譯器),重映射將提供??key=值參數(shù),? =值 部分是可選的(缺省就是key ) 。?
所有重映射的常規(guī)文件都將被編譯(包括他們的依賴文件),這個(gè)機(jī)制完全向后兼容(只要沒有文件名包含 a=) ,這不是一個(gè)很大的變化,
??? 比如 ,如果你從?github.com/ethereum/dapp-bin/ 克隆到本地 /usr/local/dapp-bin, 你可以用下列源文件
import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping;
運(yùn)行編譯器時(shí)如下
solc github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/ source.sol
注意: solc僅僅允許你從特定的目錄下include文件,他們必須是一個(gè)顯式定義的,包含目錄或子目錄的源文件, 或者是重映射目標(biāo)的目錄(子目錄)。如果你允許直接include, 要增加remapping?=/.?
如果有多個(gè)重映射,就要做一個(gè)合法文件,文件中選擇最長(zhǎng)的公共前綴
基于瀏覽器的編譯器提供了從github上的自動(dòng)重映射,并且自動(dòng)檢索網(wǎng)絡(luò)上的文件,你可以import 迭代映射? 如
import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping;.
其他源代碼提供者可以以后增加進(jìn)來。
可用單行注釋??(//) 和多行注釋? (/.../)
有種特別的注釋 叫做 “natspec?” (文檔以后寫出來),在函數(shù)聲明或定義的右邊用三個(gè)斜杠(///)或者用 兩個(gè)星號(hào)??(/* ... /). 。如果想要調(diào)用一個(gè)函數(shù),可以使用doxygen-style標(biāo)簽里面文檔功能,形式驗(yàn)證,并提供一個(gè)確認(rèn)條件的文本注釋顯示給用戶。