add documentation and changelog for default object fields (#20845)
This commit is contained in:
parent
32b145460f
commit
4a3be7e29e
2 changed files with 53 additions and 0 deletions
|
|
@ -102,6 +102,8 @@
|
||||||
|
|
||||||
- `logging` will default to flushing all log level messages. To get the legacy behaviour of only flushing Error and Fatal messages, use `-d:nimV1LogFlushBehavior`.
|
- `logging` will default to flushing all log level messages. To get the legacy behaviour of only flushing Error and Fatal messages, use `-d:nimV1LogFlushBehavior`.
|
||||||
|
|
||||||
|
- Object fields now support default values, see https://nim-lang.github.io/Nim/manual.html#types-default-values-for-object-fields for details.
|
||||||
|
|
||||||
## Standard library additions and changes
|
## Standard library additions and changes
|
||||||
|
|
||||||
[//]: # "Changes:"
|
[//]: # "Changes:"
|
||||||
|
|
|
||||||
|
|
@ -1950,6 +1950,57 @@ Some restrictions for case objects can be disabled via a `{.cast(uncheckedAssign
|
||||||
t.kind = intLit
|
t.kind = intLit
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Default values for object fields
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Object fields are allowed to have a constant default value. The type of field can be omitted if a default value is given.
|
||||||
|
|
||||||
|
```nim test
|
||||||
|
type
|
||||||
|
Foo = object
|
||||||
|
a: int = 2
|
||||||
|
b: float = 3.14
|
||||||
|
c = "I can have a default value"
|
||||||
|
|
||||||
|
Bar = ref object
|
||||||
|
a: int = 2
|
||||||
|
b: float = 3.14
|
||||||
|
c = "I can have a default value"
|
||||||
|
```
|
||||||
|
|
||||||
|
The explicit initialization uses these defaults which includes an `object` created with an object construction expression or the procedure `default`; a `ref object` created with an object construction expression or the procedure `new`; an array or a tuple with a subtype which has a default created with the procedure `default`.
|
||||||
|
|
||||||
|
|
||||||
|
```nim test
|
||||||
|
type
|
||||||
|
Foo = object
|
||||||
|
a: int = 2
|
||||||
|
b = 3.0
|
||||||
|
Bar = ref object
|
||||||
|
a: int = 2
|
||||||
|
b = 3.0
|
||||||
|
|
||||||
|
block: # created with an object construction expression
|
||||||
|
let x = Foo()
|
||||||
|
assert x.a == 2 and x.b == 3.0
|
||||||
|
|
||||||
|
let y = Bar()
|
||||||
|
assert y.a == 2 and y.b == 3.0
|
||||||
|
|
||||||
|
block: # created with an object construction expression
|
||||||
|
let x = default(Foo)
|
||||||
|
assert x.a == 2 and x.b == 3.0
|
||||||
|
|
||||||
|
let y = default(array[1, Foo])
|
||||||
|
assert y[0].a == 2 and y[0].b == 3.0
|
||||||
|
|
||||||
|
let z = default(tuple[x: Foo])
|
||||||
|
assert z.x.a == 2 and z.x.b == 3.0
|
||||||
|
|
||||||
|
block: # created with the procedure `new`
|
||||||
|
let y = new Bar
|
||||||
|
assert y.a == 2 and y.b == 3.0
|
||||||
|
```
|
||||||
|
|
||||||
Set type
|
Set type
|
||||||
--------
|
--------
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue