doc: reinstate the 'Short struct literal syntax' section + tweaks (#5762)
parent
95b7fcadca
commit
76c8e28e86
37
doc/docs.md
37
doc/docs.md
|
@ -37,7 +37,7 @@ you can do in V.
|
||||||
* [Match](#match)
|
* [Match](#match)
|
||||||
* [Defer](#defer)
|
* [Defer](#defer)
|
||||||
* [Structs](#structs)
|
* [Structs](#structs)
|
||||||
* [Trailing struct literal syntax](#short-struct-initialization-syntax)
|
* [Short struct literal syntax](#short-struct-initialization-syntax)
|
||||||
* [Access modifiers](#access-modifiers)
|
* [Access modifiers](#access-modifiers)
|
||||||
* [Methods](#methods)
|
* [Methods](#methods)
|
||||||
|
|
||||||
|
@ -868,14 +868,8 @@ println(p.x) // Struct fields are accessed using a dot
|
||||||
// Alternative literal syntax for structs with 3 fields or fewer
|
// Alternative literal syntax for structs with 3 fields or fewer
|
||||||
p = Point{10, 20}
|
p = Point{10, 20}
|
||||||
assert p.x == 10
|
assert p.x == 10
|
||||||
|
|
||||||
// you can omit the struct name when it's already known
|
|
||||||
p = {x: 30, y: 4}
|
|
||||||
assert p.y == 4
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Omitting the struct name also works for function arguments.
|
|
||||||
|
|
||||||
<p> </p>
|
<p> </p>
|
||||||
|
|
||||||
Structs are allocated on the stack. To allocate a struct on the heap
|
Structs are allocated on the stack. To allocate a struct on the heap
|
||||||
|
@ -925,9 +919,24 @@ It's also possible to define custom default values.
|
||||||
|
|
||||||
|
|
||||||
<a id='short-struct-initialization-syntax' />
|
<a id='short-struct-initialization-syntax' />
|
||||||
### Trailing struct literal syntax
|
|
||||||
|
|
||||||
There are no default function arguments or named arguments, for that trailing struct literal syntax can be used instead:
|
### Short struct literal syntax
|
||||||
|
|
||||||
|
```v
|
||||||
|
mut p := Point{x: 10, y: 20}
|
||||||
|
|
||||||
|
// you can omit the struct name when it's already known
|
||||||
|
p = {x: 30, y: 4}
|
||||||
|
assert p.y == 4
|
||||||
|
```
|
||||||
|
|
||||||
|
Omitting the struct name also works for returning a struct literal or passing one
|
||||||
|
as a function argument.
|
||||||
|
|
||||||
|
#### Trailing struct literal arguments
|
||||||
|
|
||||||
|
V doesn't have default function arguments or named arguments, for that trailing struct
|
||||||
|
literal syntax can be used instead:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
struct ButtonConfig {
|
struct ButtonConfig {
|
||||||
|
@ -950,19 +959,13 @@ button := new_button(text:'Click me', width:100)
|
||||||
assert button.height == 20
|
assert button.height == 20
|
||||||
```
|
```
|
||||||
|
|
||||||
As you can see, we can use
|
As you can see, both the struct name and braces can be omitted, instead of:
|
||||||
|
|
||||||
```
|
|
||||||
new_button(text:'Click me', width:100)
|
|
||||||
```
|
|
||||||
|
|
||||||
instead of
|
|
||||||
|
|
||||||
```
|
```
|
||||||
new_button(ButtonConfig{text:'Click me', width:100})
|
new_button(ButtonConfig{text:'Click me', width:100})
|
||||||
```
|
```
|
||||||
|
|
||||||
This only works for functions that have a struct for the last argument.
|
This only works for functions that take a struct for the last argument.
|
||||||
|
|
||||||
### Access modifiers
|
### Access modifiers
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue