58 lines
1.0 KiB
Tcl
58 lines
1.0 KiB
Tcl
enum Foo(Zero, One(x:Int), Two(x:Int, y:Int), Three(x:Int, y:Text, z:Bool), Four(x,y,z,w:Int), Last(t:Text))
|
|
|
|
func choose_text(f:Foo)->Text:
|
|
>> f
|
|
when f is Zero:
|
|
return "Zero"
|
|
is One(one):
|
|
return "One: {one}"
|
|
is Two(x, y):
|
|
return "Two: x={x}, y={y}"
|
|
is Three(three):
|
|
return "Three: {three}"
|
|
is Four:
|
|
return "Four"
|
|
else:
|
|
return "else: {f}"
|
|
|
|
func main():
|
|
>> Foo.Zero
|
|
= Foo.Zero
|
|
>> Foo.One(123)
|
|
= Foo.One(x=123)
|
|
>> Foo.Two(123, 456)
|
|
= Foo.Two(x=123, y=456)
|
|
|
|
>> Foo.One(10) == Foo.One(10)
|
|
= yes
|
|
|
|
>> Foo.One(10) == Foo.Zero
|
|
= no
|
|
|
|
>> Foo.One(10) == Foo.One(-1)
|
|
= no
|
|
|
|
>> Foo.One(10) < Foo.Two(1, 2)
|
|
= yes
|
|
|
|
>> x := Foo.One(123)
|
|
>> t := {x:"found"; default="missing"}
|
|
>> t[x]
|
|
= "found"
|
|
>> t[Foo.Zero]
|
|
= "missing"
|
|
|
|
>> choose_text(Foo.Zero)
|
|
= "Zero"
|
|
>> choose_text(Foo.One(123))
|
|
= "One: 123"
|
|
>> choose_text(Foo.Two(123, 456))
|
|
= "Two: x=123, y=456"
|
|
>> choose_text(Foo.Three(123, "hi", yes))
|
|
= "Three: Three(x=123, y=\"hi\", z=yes)"
|
|
>> choose_text(Foo.Four(1,2,3,4))
|
|
= "Four"
|
|
>> choose_text(Foo.Last("XX"))
|
|
= "else: Foo.Last(t=\"XX\")"
|
|
|