Nim教程【七】
這是國(guó)內(nèi)第一個(gè)關(guān)于Nim的系列教程
先說廢話
很開心,在今天凌晨快一點(diǎn)多的時(shí)候拿到了
nim-lang.com;nim-lang.cn;nim-lang.net
這三個(gè)域名,到不是為了投資,準(zhǔn)備用nim-lang.com做一個(gè)社區(qū)出來
不知道國(guó)內(nèi)有沒有人或者機(jī)構(gòu)打算贊助這個(gè)事情的
整型
Nim語(yǔ)言中有10個(gè)整型類型
int;int8;int16;int32;int64;uint;uint8;uint16;uint32;uint64
默認(rèn)的整型類型是int
可以使用尾綴的方式來設(shè)置整型的類型,就像下面的代碼這樣:
letx?=?0?????#?x?的類型是inty?=?0'i8??#?y?的類型是int8?z?=?0'i64?#?z?的類型是int4?u?=?0'u???#?u?的類型是intuint由于整形類型經(jīng)常被用于計(jì)算內(nèi)存里的對(duì)象
所以整形的大小和指針的大小一樣
常見的操作符
+ ? ?- ? ?* ? div ? mod ? ?< ? <= ? == ?!= ?> ? >=
都可以用在整形身上
還有一些按位計(jì)算的操作符:
and ? ? or ? ? xor ? ?not ??
也可以用在整型身上
shl操作符可以完成左移位操作
shr操作符可以完成右移位操作
移位操作一般都會(huì)把目標(biāo)當(dāng)作無(wú)符號(hào)的整形來對(duì)待
因?yàn)橐莆徊僮魍鶗?huì)導(dǎo)致乘法或除法操作
針對(duì)無(wú)符號(hào)的操作數(shù),操作符做做過二次封裝,不會(huì)產(chǎn)生內(nèi)存泄漏或溢出的問題
在表達(dá)式中使用不同類型的整型時(shí),會(huì)導(dǎo)致類型轉(zhuǎn)化
寬度比較小的類型會(huì)被轉(zhuǎn)化成寬度比較大的類型
整形不會(huì)自動(dòng)轉(zhuǎn)化成浮點(diǎn)類型
同樣,浮點(diǎn)類型也不會(huì)自動(dòng)轉(zhuǎn)化成整形
toInt方法和toFloat方法可以用來處理這兩種類型轉(zhuǎn)化操作
浮點(diǎn)類型
有三種浮點(diǎn)類型
float ? ?float32 ? ? float64
默認(rèn)的浮點(diǎn)類型是float,在現(xiàn)在的Nim實(shí)現(xiàn)中,float類型總是64位的
也可以用尾綴的方式來設(shè)置浮點(diǎn)類型的寬度,看下面的代碼:
varx?=?0.0??????#?x?的類型是floaty?=?0.0'f32??#?y?的類型是float32z?=?0.0'f64??#?z?的類型是float64+ ? - ? * ? ?/ ? ?< ? ?<= ? ? == ? ?!= ? > ? ? >=
以上這些操作符也可以用于浮點(diǎn)類型(遵從IEEE標(biāo)準(zhǔn))
和整型類型一樣,不同寬度的浮點(diǎn)類型出現(xiàn)在一個(gè)表達(dá)式中的時(shí)候
寬度較小的浮點(diǎn)類型將被格式化成寬度較大的浮點(diǎn)類型
?
整形不會(huì)自動(dòng)轉(zhuǎn)化成浮點(diǎn)類型
同樣,浮點(diǎn)類型也不會(huì)自動(dòng)轉(zhuǎn)化成整形
toInt方法和toFloat方法可以用來處理這兩種類型轉(zhuǎn)化操作
類型轉(zhuǎn)化
基本數(shù)據(jù)類型的關(guān)鍵字本身就是一個(gè)方法,可以用這些方法完成格式轉(zhuǎn)化工作
就像下面的代碼一樣:
varx:?int32?=?1.int32???#?same?as?calling?int32(1)y:?int8??=?int8('a')?#?'a'?==?97'i8z:?float?=?2.5???????#?int(2.5)?rounds?down?to?2sum:?int?=?int(x)?+?int(y)?+?int(z)?#?sum?==?100$操作符和repr方法
nim中的內(nèi)置類型都可以用$操作符把數(shù)據(jù)格式化成字符串
但是對(duì)于一些高級(jí)類型,或者用戶自定義的類型
$就無(wú)能為力了(除非你為這些類型重新定義了$操作符)
有些時(shí)候你只是想在調(diào)試的時(shí)候看看一個(gè)復(fù)雜類型的值
如果每次都要為這個(gè)復(fù)雜類型定義一個(gè)$操作符,那就太麻煩了
這個(gè)時(shí)候你可以使用repr方法
repr方法可以應(yīng)用于任何類型,甚至自關(guān)聯(lián)類型也沒有問題
來看看下面的代碼
varmyBool?=?truemyCharacter?=?'n'myString?=?"nim"myInteger?=?42myFloat?=?3.14 echo($myBool,?":",?repr(myBool)) #?-->?true:true echo($myCharacter,?":",?repr(myCharacter)) #?-->?n:'n' echo($myString,?":",?repr(myString)) #?-->?nim:0x10fa8c050"nim" echo($myInteger,?":",?repr(myInteger)) #?-->?42:42 echo($myFloat,?":",?repr(myFloat)) #?-->?3.1400000000000001e+00:3.1400000000000001e+00注意在repr(mystring)的時(shí)候,他的內(nèi)存地址也被輸出出來了
關(guān)鍵字type
在Nim中,使用type關(guān)鍵字來定義一個(gè)類型,來看下面的代碼:
typebiggestInt?=?int64??????#?biggest?integer?type?that?is?availablebiggestFloat?=?float64??#?biggest?float?type?that?is?available對(duì)象類型和枚舉類型也是通過type關(guān)鍵字定義的
枚舉類型
一個(gè)枚舉類型定義了一個(gè)有序的值序列
值序列中的每個(gè)值都是整型的
第一個(gè)值為0,第二個(gè)值是1,依次類推
一個(gè)枚舉類型的變量只能被賦值為這個(gè)序列值中的一個(gè)
來看段代碼:
typeDirection?=?enumnorth,?east,?south,?westvar?x?=?south??????#?`x`?is?of?type?`Direction`;?its?value?is?`south` echo($x)???????????#?writes?"south"?to?`stdout`上面代碼中定義的變量x的類型是Direction
注意:最后一行代碼輸出的內(nèi)容是south,而不是2,
如果使用ord方法的話,可以得到枚舉變量的值
所有的與比較相關(guān)的操作符都可以用在枚舉變量身上
可以使用點(diǎn)操作符來避免歧義,就像下面的代碼一樣:
為了更好的兼容其他語(yǔ)言,枚舉類型內(nèi)定義的符號(hào)可以指定為特定的值
但是在你指定特定值的時(shí)候,一定要按大小順序指定
如果你沒有明確給定一個(gè)符號(hào)的值,那么這個(gè)符號(hào)的值就是他上一個(gè)符號(hào)的值再加1
來看一下下面的示例代碼:
typeMyEnum?=?enuma?=?2,?b?=?4,?c?=?89?
好,今天就寫到這里,喜歡的人請(qǐng)點(diǎn)推薦!
?
轉(zhuǎn)載于:https://www.cnblogs.com/liulun/p/4519815.html
總結(jié)
- 上一篇: (转)数字格式化函数:Highchart
- 下一篇: Gridiew——表的内容居中