39 lines
814 B
Plaintext
39 lines
814 B
Plaintext
;; Swift optionals over dyn values: nil is the absence. ??, !, a test's as,
|
|
;; and chaining through a map's field.
|
|
|
|
let calls = 0
|
|
|
|
fn fallback(v)
|
|
calls += 1
|
|
v
|
|
|
|
fn describe(o, p)
|
|
if o? as g
|
|
g + 100
|
|
elif p? as h
|
|
h + 200
|
|
else
|
|
0
|
|
|
|
;; A kept if let with no else: the value, or nil.
|
|
fn kept(o) -> dyn
|
|
if o? as g 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)
|