Nim教程【十二】
排除指定符號
一般情況下使用import語句,會(huì)把一個(gè)模塊內(nèi)的符號都導(dǎo)入進(jìn)來
如果你像排除特定的符號(不想讓某些符號被導(dǎo)入進(jìn)來)
可以使用except子句
就像下面這樣
import?mymodule?except?y這行代碼排除了mymodule模塊中的y符號,其他符號都導(dǎo)入了
如果想排除更多的符號,可以使用逗號分割
?
導(dǎo)入指定符號
我們還可以使用from語句來導(dǎo)入指定的符號
請看下面的代碼:
from?mymodule?import?x,?y,?z上面的代碼中,只導(dǎo)入了mymodule模塊的x,y,z三個(gè)符號
?
強(qiáng)行名稱空間限定
先來看看下面的代碼
from?mymodule?import?x,?y,?zx()???????????#?use?x?without?any?qualification在上面的代碼中,
當(dāng)前模塊使用x的時(shí)候沒有任何限制,直接使用就可以,
就好像在當(dāng)前模塊定義的一樣
但有些時(shí)候,開發(fā)人員是希望他帶著名稱空間一起使用的
from關(guān)鍵詞與nil關(guān)鍵詞結(jié)合可以實(shí)現(xiàn)這種限制
來看看下面的代碼
from?mymodule?import?nilmymodule.x()??#?must?qualify?x?with?the?module?name?as?prefixx()???????????#?using?x?here?without?qualification?is?a?compile?error有些時(shí)候模塊名稱挺長的
而又要使用名稱空間限定的時(shí)候
就會(huì)帶來很大的麻煩
這時(shí),可以給模塊名稱起一個(gè)別名
請看下面的代碼:
from?mymodule?as?m?import?nilm.x()?????????#?m?is?aliasing?mymodule按這樣的代碼,就可以使用簡短的模塊別名作為名稱空間了
?
include語句
include語句與from語句有著本質(zhì)的區(qū)別
include語句在編譯期把幾個(gè)文件合并成一個(gè)文件
這有利于把一個(gè)大的文件分割成幾個(gè)文件
include?fileA,?fileB,?fileC?
對象
在Nim中,對象和元組很像
對象也是把一系列不同的東西放到一起的一種方式
當(dāng)對象還提供了很多元組沒有的功能
對象提供了繼承和信息隱藏
由于對象的封裝特性,所以對象的構(gòu)造方法只能用于對象的內(nèi)部
(對象應(yīng)該提供一個(gè)方法用于初始化對象,這就是構(gòu)造器)
如果你想在運(yùn)行期訪問一個(gè)對象實(shí)例的類型
可以使用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[]標(biāo)記為*的屬性可以被外部訪問到
一個(gè)對象的類型只能通過type定義
Nim中的對象支持繼承,但并不支持多繼承,說不定以后會(huì)支持多繼承
如果一個(gè)對象沒有合適的祖先
那么可以使用RootObj作為作為他的祖先
一個(gè)對象類型可以沒有祖先,
但如果沒有祖先的話,那么他同樣也不能有子孫
可以使用inheritable來產(chǎn)生一個(gè)非RootObj的子孫對象
(Nim的GTK包就是這么干的)
使用ref關(guān)鍵字來明確繼承關(guān)系
注意:在設(shè)計(jì)上組合往往優(yōu)于繼承
?
自引用對象類型
對象、元組都可以塑造出相當(dāng)復(fù)雜的類型(數(shù)據(jù)結(jié)構(gòu))
比如說自引用類型
請看如下代碼:
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?
?
好了,今天就寫到這里,喜歡的朋友請幫忙點(diǎn)個(gè)推薦
轉(zhuǎn)載于:https://www.cnblogs.com/liulun/p/4582465.html
總結(jié)
- 上一篇: Android---AlarmManag
- 下一篇: 讀後感