Nim教程【十二】
排除指定符號
一般情況下使用import語句,會把一個模塊內的符號都導入進來
如果你像排除特定的符號(不想讓某些符號被導入進來)
可以使用except子句
就像下面這樣
import?mymodule?except?y這行代碼排除了mymodule模塊中的y符號,其他符號都導入了
如果想排除更多的符號,可以使用逗號分割
?
導入指定符號
我們還可以使用from語句來導入指定的符號
請看下面的代碼:
from?mymodule?import?x,?y,?z上面的代碼中,只導入了mymodule模塊的x,y,z三個符號
?
強行名稱空間限定
先來看看下面的代碼
from?mymodule?import?x,?y,?zx()???????????#?use?x?without?any?qualification在上面的代碼中,
當前模塊使用x的時候沒有任何限制,直接使用就可以,
就好像在當前模塊定義的一樣
但有些時候,開發人員是希望他帶著名稱空間一起使用的
from關鍵詞與nil關鍵詞結合可以實現這種限制
來看看下面的代碼
from?mymodule?import?nilmymodule.x()??#?must?qualify?x?with?the?module?name?as?prefixx()???????????#?using?x?here?without?qualification?is?a?compile?error有些時候模塊名稱挺長的
而又要使用名稱空間限定的時候
就會帶來很大的麻煩
這時,可以給模塊名稱起一個別名
請看下面的代碼:
from?mymodule?as?m?import?nilm.x()?????????#?m?is?aliasing?mymodule按這樣的代碼,就可以使用簡短的模塊別名作為名稱空間了
?
include語句
include語句與from語句有著本質的區別
include語句在編譯期把幾個文件合并成一個文件
這有利于把一個大的文件分割成幾個文件
include?fileA,?fileB,?fileC?
對象
在Nim中,對象和元組很像
對象也是把一系列不同的東西放到一起的一種方式
當對象還提供了很多元組沒有的功能
對象提供了繼承和信息隱藏
由于對象的封裝特性,所以對象的構造方法只能用于對象的內部
(對象應該提供一個方法用于初始化對象,這就是構造器)
如果你想在運行期訪問一個對象實例的類型
可以使用of操作符,比如下面的代碼:
typePerson?=?ref?object?of?RootObjname*:?string??#?the?*?means?that?`name`?is?accessible?from?other?modulesage:?int???????#?no?*?means?that?the?field?is?hidden?from?other?modulesStudent?=?ref?object?of?Person?#?Student?inherits?from?Personid:?int??????????????????????#?with?an?id?fieldvarstudent:?Studentperson:?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關鍵字來明確繼承關系
注意:在設計上組合往往優于繼承
?
自引用對象類型
對象、元組都可以塑造出相當復雜的類型(數據結構)
比如說自引用類型
請看如下代碼:
typeNode?=?ref?NodeObj?#?a?traced?reference?to?a?NodeObjNodeObj?=?objectle,?ri:?Node?????#?left?and?right?subtreessym:?ref?Sym?????#?leaves?contain?a?reference?to?a?SymSym?=?object???????#?a?symbolname:?string?????#?the?symbol's?nameline:?int????????#?the?line?the?symbol?was?declared?incode:?PNode??????#?the?symbol's?abstract?syntax?tree?
?
好了,今天就寫到這里,喜歡的朋友請幫忙點個推薦
轉載于:https://www.cnblogs.com/liulun/p/4582465.html
總結
- 上一篇: Android---AlarmManag
- 下一篇: 讀後感