源檔案的布局
源檔案包括任意數量的合約定義和 include指令 引入其他源檔案
文法和語義
Solidity支援 import語句,非常類似于JavaScript(ES6),雖然Solidity不知道“預設導出”的概念。
在全局層次上,你可以用下列形式使用import語句
import "filename";
将會從”filename”導入所有的全局符号(和目前導入的符号)到目前的全局範圍裡(不同于ES6,但是Solidity保持向後相容)
**import** ***** as symbolName from "filename";
創立了一個全局的符号名 symbolName,其中的成員就來自“filename”的所有符号
import {symbol1 as alias, symbol2} from “filename”;
将創立一個新的全局變量别名:alias 和 symbol2, 它将分别從”filename” 引入symbol1 和 symbol2
另外,Solidity文法不是ES6的子集,但可能(使用)更便利
import “filename” as symbolName;
等價于 import * as symbolName from “filename”;.
路徑
- 在上面,檔案名總是用/作為目錄分割符,. 是目前的目錄,.. 是父目錄,路徑名稱不用.開頭的都将視為絕對路徑。
- 從同一個目錄下import 一個檔案 x 作為目前檔案,用 import ”./x” as x; 如果使用
- import “x” as x; 是不同的檔案引用(在全局中使用”include directory”),。
- 它将依賴于編譯器(見後)來解析路徑。通常,目錄層次不必嚴格限定映射到你的本地檔案系統,它也可以映射到ipfs,http或git上的其他資源
使用真正的編譯器
當編譯器啟動時,不僅可以定義如何找到第一個元素的路徑,也可能定義字首重映射的路徑,如 github.com/ethereum/dapp-bin/library将重映射到 /usr/local/dapp-bin/library ,編譯器将從這個路徑下讀取檔案。 如果重映射的keys是字首, (編譯器将嘗試)最長的路徑。允許回退并且映射到“/usr/local/include/solidity”。
solc:
solc(行指令編譯器),重映射将提供 key=值參數, =值 部分是可選的(預設就是key ) 。
所有重映射的正常檔案都将被編譯(包括他們的依賴檔案),這個機制完全向後相容(隻要沒有檔案名包含 a=) ,這不是一個很大的變化,
比如 ,如果你從 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僅僅允許你從特定的目錄下include檔案,他們必須是一個顯式定義的,包含目錄或子目錄的源檔案, 或者是重映射目标的目錄(子目錄)。如果你允許直接include, 要增加remapping =/.
如果有多個重映射,就要做一個合法檔案,檔案中選擇最長的公共字首
基于浏覽器的solidity
基于浏覽器的編譯器提供了從github上的自動重映射,并且自動檢索網絡上的檔案,你可以import 疊代映射 如
import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping;.
其他源代碼提供者可以以後增加進來。
注釋
可用單行注釋 (//) 和多行注釋 (/…/)
有種特别的注釋 叫做 “natspec ” (文檔以後寫出來),在函數聲明或定義的右邊用三個斜杠(///)或者用 兩個星号 (/* … /). 。如果想要調用一個函數,可以使用doxygen-style标簽裡面文檔功能,形式驗證,并提供一個确認條件的文本注釋顯示給使用者。
轉自:
https://github.com/twq0076262/solidity-zh/edit/master/layout-state-variables-storage.md如果你希望高效的學習以太坊DApp開發,可以通路彙智網提供的最熱門線上互動教程:
其他更多内容也可以通路
這個以太坊部落格。