flan/test/programs/optionals-dyn.fln

39 lines
833 B
Plaintext

;; Swift optionals over dyn values: nil is the absence. ??, !, if let over a
;; plain name, and chaining through a map's field.
let calls = 0
fn fallback(v)
calls += 1
v
fn describe(o, p)
if let g = o
g + 100
elif let h = p
h + 200
else
0
;; A kept if let with no else: the value, or nil.
fn kept(o) -> dyn
if let g = o then g * 2
fn power(car) = car.engine?.power
fn run(a, n)
println(a ?? 7, n ?? 7)
println(n ?? n ?? 9)
println(a ?? fallback(1), n ?? fallback(2), calls)
println(a!)
println(describe(a, n), describe(n, a), describe(n, n))
println(kept(a), kept(n))
let car = {:name "a" :engine {:power 90}}
let bare = {:name "b" :engine nil}
println(power(car), power(bare))
println(power(car) ?? -1, power(bare) ?? -1)
println(car.engine?.power ?? -1)
fn main()
run(3, nil)