• 属性

    属性

    Nim不需要 get-properties :使用 方法调用语法 调用的普通get-procedure达到相同目的。 但设定值是不同的;为此需要一个特殊的setter语法:

    1. # 模块asocket
    2. type
    3. Socket* = ref object of RootObj
    4. host: int # 无法从模块外部访问
    5.  
    6. proc `host=`*(s: var Socket, value: int) {.inline.} =
    7. ## hostAddr的setter.
    8. ##它访问'host'字段并且不是对 ``host =`` 的递归调用,如果内置的点访问方法可用,则首选点访问:
    9. s.host = value
    10.  
    11. proc host*(s: Socket): int {.inline.} =
    12. ## hostAddr的getter
    13. ##它访问'host'字段并且不是对 ``host`` 的递归调用,如果内置的点访问方法可用,则首选点访问:
    14. s.host
    1. # 模块 B
    2. import asocket
    3. var s: Socket
    4. new s
    5. s.host = 34 # 同`host=`(s, 34)

    定义为 f= 的proc(尾随 = )被称为 setter 。

    可以通过常见的反引号表示法显式调用setter:

    1. proc `f=`(x: MyObject; value: string) =
    2. discard
    3.  
    4. `f=`(myObject, "value")

    f= 可以在模式 xf = value 中隐式调用,当且仅当 x 的类型没有名为 f 的字段或者 f 时在当前模块中不可见。 这些规则确保对象字段和访问者可以具有相同的名称。 在模块 x.f 中总是被解释为字段访问,在模块外部它被解释为访问器proc调用。