属性
Nim 不需要 get-properties : 使用 方法调用语法 调用的普通 get-procedure 达到相同目的。但 set 值是不同的; 因而需要一个特殊的 setter 语法:
# asocket 模块
type
Socket* = ref object of RootObj
host: int # cannot be accessed from the outside of the module
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 # same as `host=`(s, 34)
定义为 f= 的 proc(后面跟 \= )被称为 setter 。 可以通过常见的反引号表示法显式调用 setter:
proc `f=`(x: MyObject; value: string) =
discard
`f=`(myObject, "value")
f= 可以在 x.f = value 模式中隐式调用,当且仅当 x 的类型没有名为 f 的字段或 f 在当前模块中不可见时。 此规则确保对象字段和访问器可以有相同的名字。在模块内 x.f 总是被解释为字段访问,在模块外则被解释为访问器过程调用。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .