天天看點

Nim語言的子產品化程式設計

前言

Nim支援把一大段程式分成若幹個子產品

一個子產品就是一個源代碼檔案

每個子產品都擁有它自己的名稱空間

子產品化可以起到封裝(資訊隐藏)和分步編譯的作用

一個子產品可以通過import語句獲得另一個子產品的符号

nim語言允許子產品間的循環引用,

隻有用星号(*)标記的頂級符号才會被導出給其他子產品。

子產品名和檔案名相同,子產品名的命名方式和nim程式設計語言的辨別符命名方式相同

編譯器編譯子產品的規則如下:

按照import的導入順序,編譯子產品

如果存在循環引用,那麼就隻導入頂級符号(已解析的符号),如果編譯器發現未知的辨別符,那麼就停止編譯

請看下面的例子:

子產品A的代碼:

子產品B的代碼:

看起來是不是很厲害呢?!

import語句

可以通過import導入一個或多個子產品

(導入多個子產品的話,隻要在import後面跟上子產品的名字即可,子產品的名字用逗号隔開)

可以用except排除一個或多個子產品中的符号

請看下面的示例代碼:

注意:如果導入的子產品中并沒有導出排除的辨別符的話,nim編譯器是不會給出報警或異常的

include語句

include語句完全不同于import語句,

include語句會迫使編譯器把一個檔案的源碼“包含”到另一個檔案中。

需要把一個檔案拆分成多個檔案的時候include語句很有用

import語句中的子產品名

import語句中的子產品名可以設定别名

如果你用了别名的話,那麼原來的子產品名稱就不起作用了

如果一個子產品在某個子目錄中

可以使用如下三種辦法來導入該子產品

注意:雖然子產品在子目錄中,但是子產品名并不包含路徑

下面的代碼是錯誤的:

下面這種代碼設定也沒有任何意義

from...import...語句

如果你隻想導入某一個子產品的指定符号,那麼你就可以使用這種語句

來看下面的代碼:

如果你想迫使開發人員必須在主調子產品中使用完全限定符來調用被調子產品的符号

那麼你可以使用,下面這種方法

Export語句

下來看下面三個子產品的代碼

子產品A把子產品B中的符号導出出來了

這樣子產品C就不用再導入子產品B了

繼續閱讀