属性
如上例所示,Nim不需要 get-properties :使用 方法调用语法 调用的普通get-procedures实现相同。但设定值是不同的;为此需要一个特殊的setter语法:
- type
- Socket* = ref object of RootObj
- h: int # 由于缺少星号,无法从模块外部访问
- proc `host=`*(s: var Socket, value: int) {.inline.} =
- ## setter of host address
- s.h = value
- proc host*(s: Socket): int {.inline.} =
- ## getter of host address
- s.h
- var s: Socket
- new s
- s.host = 34 # same as `host=`(s, 34)
(该示例还显示了 inline 程序。)
可以重载 [] 数组访问运算符来提供 数组属性 :
- type
- Vector* = object
- x, y, z: float
- proc `[]=`* (v: var Vector, i: int, value: float) =
- # setter
- case i
- of 0: v.x = value
- of 1: v.y = value
- of 2: v.z = value
- else: assert(false)
- proc `[]`* (v: Vector, i: int): float =
- # getter
- case i
- of 0: result = v.x
- of 1: result = v.y
- of 2: result = v.z
- else: assert(false)
这个例子可以更好的用元组展示,元组提供 v[] 访问。