变量(常量)绑定
- python
无特定关键字,直接设值
a = r”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将一个文字列放到名为a的变量里
a = 8086 # OK,a的类型由文字列(上面定义的正则表达式)变成了整数(8086)
这里就带来一个在大工程里很容易带来困扰的问题,理解代码不得不受制于类型极易变的变量,要理解代码所必需的工作量极大. -
nim
- var
可变变量前缀.
var a = re”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将变量a与文字列绑定
其后a的内容可变
a = “change the value” #这里OK - let
不可变变量前缀.(一旦绑定,不得变更)
let b = re”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将不可变变量b与文字列绑定
其后改变b
b = “change the value” #这里出错 -
const
常量前缀.const HTTP_METHOD = r”HEAD”
- var
常用数据结构
-
python
- list:可变长度数组.类似java的ArrayList.
- tuple:不可变数组.
- dictionary:类似java的HashMap.key-value数据结构
-
nim
- seq:类似python list.长度可变,元素可删除增加变更.
使用方法:
var e = newSeq[int]() #一个空序列(列表)
let values = @[1,3,5,7] #快捷定义一个有4个整数元素的列表并初始化.完全定义:let values: seq[int] = @[1,3,5,7] -
tuple
-
与python tuple相同
proc test():tuple[name:string, age:int8] = (“bill”,67) let (fname, fage) = test() # 此时,函数test返回的名称与年龄分别赋给了fname, fage.fname类型推断为string, fage类型推断为int8.
-
与python dictionary相同用法. 用key-value进行访问
示例1:var o = (name: "Banana", weight: 2, rating: 'c') o[1] = 7 # weight:2 → 7 o.name = "Apple" o.rating = ‘g’
示例2:
type Person = tuple[name: string, age: int] var person: Person person = (name: "Peter", age: 30) person = ("Peter", 30)# 可读性略差,但结果一样的写法: echo person.name # "Peter" echo person.age # 30
-
-
array
虽然完全不同,但用法却与python的tuple有些异曲同工.在需要不可变数组(既不需要增删改元素)的地方,极其方便地临时存一些值.var values = [“abc”,”def”,”ghijk”] #自动推断类型为array[3,string] values2: array[4,int] = [1,2,3,5] #4个下标的不可变数组,初始化时赋了4个值. values:array[0..5, int] = [2,3,5,8] #最长5个下标的不可变数组,初始化时赋了4个值.
- seq:类似python list.长度可变,元素可删除增加变更.
片断
-
python
-起始a = "python is a progamming language" b = "Slices are useless." print(a[12:18]) # --> 'progam' #12:从开始处第12个下标;18:从开始处的下标
-反向标记片断
b = "Slices are useful." print(b[11:-1]) # → 'useful' . 11:从开始处第11个下标;-1:从结尾处向前减少下标(反向的意思),也就是[倒数1的下标] b[11:-2] = "useful" # 出错, python不支持这样赋值
-
nim
-起始var a = "Nim is a progamming language" echo a[7..12] # --> 'a prog'
-反向标记片断
var b = "Slices are useless." b[11..^2] = "useful" #nim用^表示反向下标位置.^2表示倒数第二个下标 echo b # --> 'Slices are useful.' # 改变变量b的内容
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。