对象

在具有名称的单个结构中将不同值打包在一起的默认类型是对象类型。对象是值类型,意味关当对象赋值给一个新变量时它所有的组成部分也一起拷贝。

每个对象类型 Foo 有一个构造函数 Foo(field: value, …) 其中它的所有字段可以被初始化。没有指定的字段将获得它们的默认值。

  1. type
  2. Person = object
  3. name: string
  4. age: int
  5.  
  6. var person1 = Person(name: "Peter", age: 30)
  7.  
  8. echo person1.name # "Peter"
  9. echo person1.age # 30
  10.  
  11. var person2 = person1 # 复制person 1
  12.  
  13. person2.age += 14
  14.  
  15. echo person1.age # 30
  16. echo person2.age # 44
  17.  
  18.  
  19. # 顺序可以改变
  20. let person3 = Person(age: 12, name: "Quentin")
  21.  
  22. # 不需要指定每个成员
  23. let person4 = Person(age: 3)
  24. # 未指定的成员将用默认值初始化。本例中它是一个空字符串。
  25. doAssert person4.name == ""

在定义的模块外可见的对象字段需要加上 *

  1. type
  2. Person* = object # 其它模块可见
  3. name*: string # 这个类型的字段在其它模块可见
  4. age*: int