docs: add a note on initializing structs with reference fields (#7913)
parent
cad4c5ee37
commit
06bcd404b0
36
doc/docs.md
36
doc/docs.md
|
@ -2737,6 +2737,42 @@ surrounding code).
|
||||||
|
|
||||||
* Note: This is work in progress.
|
* Note: This is work in progress.
|
||||||
|
|
||||||
|
### Structs with reference fields
|
||||||
|
|
||||||
|
Structs with references require explicitly setting the initial value to a
|
||||||
|
reference value unless the struct already defines its own initial value.
|
||||||
|
|
||||||
|
Zero-value references, or nil pointers, will **NOT** be supported in the future,
|
||||||
|
for now data structures such as Linked Lists or Binary Trees that rely on reference
|
||||||
|
fields that can use the value `0`, understanding that it is unsafe, and that it can
|
||||||
|
cause a panic.
|
||||||
|
|
||||||
|
```v
|
||||||
|
struct Node {
|
||||||
|
a &Node
|
||||||
|
b &Node = 0 // Auto-initialized to nil, use with caution!
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reference fields must be initialized unless an initial value is declared.
|
||||||
|
// Zero (0) is OK but use with caution, it's a nil pointer.
|
||||||
|
foo := Node{
|
||||||
|
a: 0
|
||||||
|
}
|
||||||
|
bar := Node{
|
||||||
|
a: &foo
|
||||||
|
}
|
||||||
|
baz := Node{
|
||||||
|
a: 0
|
||||||
|
b: 0
|
||||||
|
}
|
||||||
|
qux := Node{
|
||||||
|
a: &foo
|
||||||
|
b: &bar
|
||||||
|
}
|
||||||
|
println(baz)
|
||||||
|
println(qux)
|
||||||
|
```
|
||||||
|
|
||||||
## Calling C functions from V
|
## Calling C functions from V
|
||||||
|
|
||||||
```v
|
```v
|
||||||
|
|
Loading…
Reference in New Issue