mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: support short struct update syntax {...ident,
(#8613)
This commit is contained in:
parent
b92f980274
commit
cd4f7101f7
@ -1633,6 +1633,8 @@ Only more complex types such as arrays and maps may be modified.
|
|||||||
Use `user.register()` or `user = register(user)`
|
Use `user.register()` or `user = register(user)`
|
||||||
instead of `register(mut user)`.
|
instead of `register(mut user)`.
|
||||||
|
|
||||||
|
#### Struct update syntax
|
||||||
|
|
||||||
V makes it easy to return a modified version of an object:
|
V makes it easy to return a modified version of an object:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
@ -1644,7 +1646,7 @@ struct User {
|
|||||||
|
|
||||||
fn register(u User) User {
|
fn register(u User) User {
|
||||||
return {
|
return {
|
||||||
u |
|
...u
|
||||||
is_registered: true
|
is_registered: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,8 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
|
|||||||
// it should be a struct
|
// it should be a struct
|
||||||
if p.peek_tok.kind == .pipe {
|
if p.peek_tok.kind == .pipe {
|
||||||
node = p.assoc()
|
node = p.assoc()
|
||||||
} else if p.peek_tok.kind == .colon || p.tok.kind in [.rcbr, .comment] {
|
} else if (p.tok.kind == .name && p.peek_tok.kind == .colon)
|
||||||
|
|| p.tok.kind in [.rcbr, .comment, .ellipsis] {
|
||||||
node = p.struct_init(true) // short_syntax: true
|
node = p.struct_init(true) // short_syntax: true
|
||||||
} else if p.tok.kind == .name {
|
} else if p.tok.kind == .name {
|
||||||
p.next()
|
p.next()
|
||||||
|
@ -164,12 +164,14 @@ fn test_assoc_with_vars() {
|
|||||||
def2 := Def{
|
def2 := Def{
|
||||||
a: 12
|
a: 12
|
||||||
}
|
}
|
||||||
merged := Def{
|
mut merged := Def{
|
||||||
...def2
|
...def2
|
||||||
a: 42
|
a: 42
|
||||||
}
|
}
|
||||||
assert merged.a == 42
|
assert merged.a == 42
|
||||||
assert merged.b == 7
|
assert merged.b == 7
|
||||||
|
merged = {...def2, b: 9}
|
||||||
|
assert merged == Def{12, 9}
|
||||||
|
|
||||||
def3 := &Def{ 100, 200 }
|
def3 := &Def{ 100, 200 }
|
||||||
merged1 := Def{...(*def3)}
|
merged1 := Def{...(*def3)}
|
||||||
|
Loading…
Reference in New Issue
Block a user