mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
docs: update smart casting documentation (#7884)
This commit is contained in:
parent
7c290a7fe8
commit
a8741fdced
16
doc/docs.md
16
doc/docs.md
@ -28,7 +28,7 @@ git clone https://github.com/vlang/v && cd v && make
|
|||||||
### Windows:
|
### Windows:
|
||||||
You need `git`, and a C compiler like `gcc` or `msvc`:
|
You need `git`, and a C compiler like `gcc` or `msvc`:
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/vlang/v
|
git clone https://github.com/vlang/v
|
||||||
cd v
|
cd v
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
@ -1888,18 +1888,20 @@ if w is Mars {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
`w` has type `Mars` inside the body of the `if` statement. This is
|
`w` has type `Mars` inside the body of the `if` statement. This is
|
||||||
known as *flow-sensitive typing*. You can also specify a variable name:
|
known as *flow-sensitive typing*.
|
||||||
|
If `w` is a mutable identifier, it would be unsafe if the compiler smart casts it without a warning.
|
||||||
|
That's why you have to declare a `mut` before the `is` expression:
|
||||||
|
|
||||||
```v ignore
|
```v ignore
|
||||||
if w is Mars as mars {
|
if mut w is Mars {
|
||||||
assert typeof(w).name == 'World'
|
assert typeof(w).name == 'Mars'
|
||||||
if mars.dust_storm() {
|
if w.dust_storm() {
|
||||||
println('bad weather!')
|
println('bad weather!')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
`w` keeps its original type. This form is necessary if `w` is a more
|
Otherwise `w` would keep its original type.
|
||||||
complex expression than just a variable name.
|
> This works for both, simple variables and complex expressions like `user.name`
|
||||||
|
|
||||||
#### Matching sum types
|
#### Matching sum types
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user