2024-03-16 14:30:32 +00:00
|
|
|
# Enums (Tagged unions)
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
## Basic enums
|
|
|
|
|
|
|
|
```thp
|
|
|
|
enum Suit
|
|
|
|
{
|
|
|
|
Hearts,
|
|
|
|
Diamonds,
|
|
|
|
Clubs,
|
|
|
|
Spades,
|
|
|
|
}
|
|
|
|
|
2024-02-20 10:53:38 +00:00
|
|
|
val suit = Suit::Hearts
|
2023-10-02 01:41:38 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Enums with values
|
|
|
|
|
|
|
|
```thp
|
|
|
|
enum IpAddress
|
|
|
|
{
|
|
|
|
V4(String),
|
|
|
|
V6(String),
|
|
|
|
}
|
|
|
|
|
2024-02-20 10:17:21 +00:00
|
|
|
val addr_1 = IpAddress::V4("192.168.0.1")
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
match addr_1
|
2024-03-16 14:30:32 +00:00
|
|
|
case IpAddress::V4(ip)
|
2023-10-02 01:41:38 +00:00
|
|
|
{
|
|
|
|
// code..
|
|
|
|
}
|
2024-03-16 14:30:32 +00:00
|
|
|
case IpAddress::V6(ip)
|
2023-10-02 01:41:38 +00:00
|
|
|
{
|
|
|
|
// more code..
|
|
|
|
}
|
|
|
|
|
|
|
|
// Without the full qualifier
|
|
|
|
match addr_1
|
2024-03-16 14:30:32 +00:00
|
|
|
case ::V4(ip)
|
2023-10-02 01:41:38 +00:00
|
|
|
{
|
|
|
|
// code...
|
|
|
|
}
|
2024-03-16 14:30:32 +00:00
|
|
|
case ::V6(ip)
|
2023-10-02 01:41:38 +00:00
|
|
|
{
|
|
|
|
// even more code...
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
|