mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
doc: update sum type docs (#5702)
This commit is contained in:
60
examples/lander.v
Normal file
60
examples/lander.v
Normal file
@@ -0,0 +1,60 @@
|
||||
// Example of sum types
|
||||
// Models a landing craft leaving orbit and landing on a world
|
||||
import rand
|
||||
import time
|
||||
|
||||
struct Moon {
|
||||
}
|
||||
|
||||
struct Mars {
|
||||
}
|
||||
fn (m Mars) dust_storm() bool {
|
||||
return rand.int() >= 0
|
||||
}
|
||||
|
||||
struct Venus {
|
||||
}
|
||||
|
||||
type World = Moon | Mars | Venus
|
||||
|
||||
struct Lander {
|
||||
}
|
||||
fn (l Lander) deorbit() {
|
||||
println('leaving orbit')
|
||||
}
|
||||
fn (l Lander) open_parachutes(n int) {
|
||||
println('opening $n parachutes')
|
||||
}
|
||||
|
||||
fn wait() {
|
||||
println('waiting...')
|
||||
time.sleep(1)
|
||||
}
|
||||
|
||||
fn (l Lander) land(w World) {
|
||||
if w is Mars {
|
||||
m := w as Mars
|
||||
for m.dust_storm() {
|
||||
wait()
|
||||
}
|
||||
}
|
||||
l.deorbit()
|
||||
match w {
|
||||
Moon {} // no atmosphere
|
||||
Mars {
|
||||
// light atmosphere
|
||||
l.open_parachutes(3)
|
||||
}
|
||||
Venus {
|
||||
// heavy atmosphere
|
||||
l.open_parachutes(1)
|
||||
}
|
||||
}
|
||||
println('landed')
|
||||
}
|
||||
|
||||
fn main() {
|
||||
l := Lander {}
|
||||
l.land(Venus{})
|
||||
l.land(Mars{})
|
||||
}
|
||||
Reference in New Issue
Block a user