Structs provide a simple data model, especially with private members for encapsulation.
Augmenting structs is encouraged, as in:
module Plop
struct Point = { _id, x, y }
augment Plop.types.Point {
function str = |this| -> "{id=" + this: _id() + ",x=" + this: x() + ",y=" + this: y() + "}"
}When an augmentation on a struct is defined within the same module, then you can omit the full type name of the struct:
module Plop
struct Point = { _id, x, y }
augment Point {
function str = |this| -> "{id=" + this: _id() + ",x=" + this: x() + ",y=" + this: y() + "}"
}Again, it is important to note that augmentations can only access private struct members when they originate from the same module.
Of course doing the following is a bad idea, with the concise augmentation taking over the fully-qualified one:
module Foo
struct Value = { v }
augment Foo.types.Value {
function a = |this| -> "a"
}
# This will discard the previous augmentation...
augment Value {
function b = |this| -> "a"
}
function check = {
let v = Value(666)
# Ok
v: b()
# Fails, the concise augmentation overrides the fully-qualifed one
v: a()
}