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