Objects in Nim are a bit more rigid type than tuples. | |
We define a new object type by defining a new type .
|
type Person = object
name: string
age: int
|
An object can be initialized by calling the object constructor. |
let alice = Person(name: "Alice", age: 25)
echo alice
|
echo alice.name, " is ", alice.age, " years old."
|
|
Uninitialized fields will be zero-valued. |
let bob = Person(name: "Bob")
echo bob.age, " == 0"
|
Order of parameters in constructor does not matter. |
let jane = Person(age: 28, name: "Jane")
echo jane
|
To create a custom constructor, define a proc returning an object instance. |
proc newPerson(name: string, age: int): Person =
Person(name: name, age: age)
|
let joe = newPerson("Joe", 24)
echo joe
|
|
Reassigning an object will make a copy of it. |
var p1 = Person(name: "Bill")
var p2 = p1
p2.name = "Steve" # does not modify p1
echo p1, p2
|
In the references example, we will learn how to work with object references instead of object values. | |
$ nim c -r objects.nim (name: "Alice", age: 25) Alice is 25 years old. 0 == 0 (name: "Jane", age: 28) (name: "Joe", age: 24) (name: "Bill", age: 0)(name: "Steve", age: 0) |
|
Previously: Tuples
Next up: References