属性
Nim不需要 get-properties :使用 方法调用语法 调用的普通get-procedure达到相同目的。 但设定值是不同的;为此需要一个特殊的setter语法:
- # 模块asocket
- type
- Socket* = ref object of RootObj
- host: int # 无法从模块外部访问
- proc `host=`*(s: var Socket, value: int) {.inline.} =
- ## hostAddr的setter.
- ##它访问'host'字段并且不是对 ``host =`` 的递归调用,如果内置的点访问方法可用,则首选点访问:
- s.host = value
- proc host*(s: Socket): int {.inline.} =
- ## hostAddr的getter
- ##它访问'host'字段并且不是对 ``host`` 的递归调用,如果内置的点访问方法可用,则首选点访问:
- s.host
- # 模块 B
- import asocket
- var s: Socket
- new s
- s.host = 34 # 同`host=`(s, 34)
定义为 f= 的proc(尾随 = )被称为 setter 。
可以通过常见的反引号表示法显式调用setter:
- proc `f=`(x: MyObject; value: string) =
- discard
- `f=`(myObject, "value")
f= 可以在模式 xf = value 中隐式调用,当且仅当 x 的类型没有名为 f 的字段或者 f 时在当前模块中不可见。 这些规则确保对象字段和访问者可以具有相同的名称。 在模块 x.f 中总是被解释为字段访问,在模块外部它被解释为访问器proc调用。