排除指定符號
一般情況下使用import語句,會把一個模組內的符號都匯入進來
如果你像排除特定的符號(不想讓某些符號被匯入進來)
可以使用except子句
就像下面這樣
import mymodule except y
這行程式碼排除了mymodule模組中的y符號,其他符號都匯入了
如果想排除更多的符號,可以使用逗號分割
匯入指定符號
我們還可以使用from語句來匯入指定的符號
請看下面的程式碼:
from mymodule import x, y, z
上面的程式碼中,只匯入了mymodule模組的x,y,z三個符號
強行名稱空間限定
先來看看下面的程式碼
from mymodule import x, y, z x() # use x without any qualification
在上面的程式碼中,
當前模組使用x的時候沒有任何限制,直接使用就可以,
就好像在當前模組定義的一樣
但有些時候,開發人員是希望他帶著名稱空間一起使用的
from關鍵詞與nil關鍵詞結合可以實現這種限制
來看看下面的程式碼
from mymodule import nil mymodule.x() # must qualify x with the module name as prefix x() # using x here without qualification is a compile error
有些時候模組名稱挺長的
而又要使用名稱空間限定的時候
就會帶來很大的麻煩
這時,可以給模組名稱起一個別名
請看下面的程式碼:
from mymodule as m import nil m.x() # m is aliasing mymodule
按這樣的程式碼,就可以使用簡短的模組別名作為名稱空間了
include語句
include語句與from語句有著本質的區別
include語句在編譯期把幾個檔案合併成一個檔案
這有利於把一個大的檔案分割成幾個檔案
include fileA, fileB, fileC
物件
在Nim中,物件和元組很像
物件也是把一系列不同的東西放到一起的一種方式
當物件還提供了很多元組沒有的功能
物件提供了繼承和資訊隱藏
由於物件的封裝特性,所以物件的構造方法只能用於物件的內部
(物件應該提供一個方法用於初始化物件,這就是構造器)
如果你想在執行期訪問一個物件例項的型別
可以使用of操作符,比如下面的程式碼:
type Person = ref object of RootObj name*: string # the * means that `name` is accessible from other modules age: int # no * means that the field is hidden from other modules Student = ref object of Person # Student inherits from Person id: int # with an id field var student: Student person: Person assert(student of Student) # is true # object construction: student = Student(name: "Anton", age: 5, id: 2) echo student[]
標記為*的屬性可以被外部訪問到
一個物件的型別只能通過type定義
Nim中的物件支援繼承,但並不支援多繼承,說不定以後會支援多繼承
如果一個物件沒有合適的祖先
那麼可以使用RootObj作為作為他的祖先
一個物件型別可以沒有祖先,
但如果沒有祖先的話,那麼他同樣也不能有子孫
可以使用inheritable來產生一個非RootObj的子孫物件
(Nim的GTK包就是這麼幹的)
使用ref關鍵字來明確繼承關係
注意:在設計上組合往往優於繼承
自引用物件型別
物件、元組都可以塑造出相當複雜的型別(資料結構)
比如說自引用型別
請看如下程式碼:
type Node = ref NodeObj # a traced reference to a NodeObj NodeObj = object le, ri: Node # left and right subtrees sym: ref Sym # leaves contain a reference to a Sym Sym = object # a symbol name: string # the symbol's name line: int # the line the symbol was declared in code: PNode # the symbol's abstract syntax tree
好了,今天就寫到這裡,喜歡的朋友請幫忙點個推薦