mirror of
https://github.com/Nexoniarz/Finch.git
synced 2026-11-03 00:44:27 +00:00
Enums whose variants hold values
enum Shape { Circle(float), Rect(float, float), Point }; Shape.Circle(2.0) makes one, match names the values
(Circle(r), _ to ignore), exhaustive like plain enums, printing shows Rect(2, 3.5). Underneath it is a struct (tag +
every variant's values), so copying, freeing, methods and valgrind-cleanliness come with it. Also: stray note files removed.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015f73FesGZGYPkmDvUcj6QX
This commit is contained in:
parent
dc0334fa0e
commit
3e45b62812
13 changed files with 75170 additions and 66737 deletions
|
|
@ -421,4 +421,4 @@ serwer podpowiada dalej z ostatniej wersji, która się skompilowała. Test akce
|
|||
- Sterownik używa narzędzi `sh` (`rm`, `mkdir`), więc wymaga powłoki POSIX.
|
||||
- Generyki są monomorfizowane (kod rośnie z liczbą instancji); nie ma ograniczeń na typy, błędne użycie to błąd wewnątrz
|
||||
wygenerowanego ciała.
|
||||
- Jeszcze nie ma enumów z danymi (warianty nie niosą wartości).
|
||||
|
||||
|
|
|
|||
|
|
@ -928,6 +928,29 @@ tests/cross.sh windows # każdy test zbudowany na Windowsa i uruchomiony w
|
|||
tests/cross.sh arm64 # każdy test zbudowany na Linuksa ARM64 i uruchomiony w QEMU
|
||||
```
|
||||
|
||||
### Warianty z wartościami
|
||||
|
||||
Wariant może nieść wartości. Tworzysz go przez `Shape.Circle(2.0)`, a wyciągasz `match`-em, który je nazywa:
|
||||
|
||||
```c
|
||||
enum Shape {
|
||||
Circle(float)
|
||||
Rect(float, float)
|
||||
Point
|
||||
}
|
||||
|
||||
fn Shape.area() -> float {
|
||||
return match self {
|
||||
Circle(r) -> 3.14 * r * r
|
||||
Rect(w, h) -> w * h
|
||||
Point -> 0.0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`_` pomija wartość. `match` musi obsłużyć każdy wariant (albo kończyć się `else`). Wypisanie pokazuje `Rect(2, 3.5)`. Taki enum
|
||||
jest kopiowany i zwalniany jak struktura; nie da się go porównać przez `==` (użyj `match`). Warianty takich enumów nie mają numerów.
|
||||
|
||||
---
|
||||
|
||||
## 23. Enumy i match
|
||||
|
|
@ -1031,7 +1054,7 @@ write_file(path.join("out", "config.json"), json.pretty(dok))
|
|||
|
||||
Jeszcze nie ma:
|
||||
|
||||
- Interfejsów i enumów, których warianty niosą wartości (`Kolo(promien)`).
|
||||
- Interfejsów.
|
||||
- Tekstu świadomego Unicode: `.len`, `s[i]` i `upper()` działają na bajtach / ASCII.
|
||||
- Wątków.
|
||||
- Windowsa na ARM64, systemów 32-bitowych, WebAssembly.
|
||||
|
|
|
|||
Loading…
Reference in a new issue