docs: update smart casting documentation (#7884)

pull/7887/head
Daniel Däschle 2021-01-05 11:57:12 +01:00 committed by GitHub
parent 7c290a7fe8
commit a8741fdced
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 7 deletions

View File

@ -28,7 +28,7 @@ git clone https://github.com/vlang/v && cd v && make
### Windows:
You need `git`, and a C compiler like `gcc` or `msvc`:
```bash
git clone https://github.com/vlang/v
git clone https://github.com/vlang/v
cd v
make
```
@ -1888,18 +1888,20 @@ if w is Mars {
}
```
`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
if w is Mars as mars {
assert typeof(w).name == 'World'
if mars.dust_storm() {
if mut w is Mars {
assert typeof(w).name == 'Mars'
if w.dust_storm() {
println('bad weather!')
}
}
```
`w` keeps its original type. This form is necessary if `w` is a more
complex expression than just a variable name.
Otherwise `w` would keep its original type.
> This works for both, simple variables and complex expressions like `user.name`
#### Matching sum types