Перейти к содержимому
Топаз6.0 · До релиза
Загрузка →

Поиск в документации

Спецификация 6.0

Выберите результат стрелками и нажмите Enter, чтобы открыть его.

Введите имя API, номер диагностики, правило или тему проекта.

    Тур

    Данные и образцы

    Build two ticket values and use an enum pattern to print their states.

    Prerequisite

    Ссылка

    Use Topaz 5.21.3 with language mode 5.21 and the SELF compiler. Complete First checked and executed program first.

    1. Build a value and handle its cases

    Ссылка

    Save the source as data-and-patterns.tpz. Ticket has named fields and a Status value. Construct a variant with Status.Open(). Match it with case Open().

    2. Check the program

    Ссылка

    Check the ticket program

    Ссылка
    data-and-patterns.tpzCheck the ticket programОткрыть песочницу →
    1. import std.io
    2. enum Status { Open, Closed }
    3. record Ticket { title: string, status: Status }
    4. function describe(ticket: Ticket) -> string {
    5. let state = match (ticket.status) {
    6. case Open() => "open"
    7. case Closed() => "closed"
    8. }
    9. return "{ticket.title}: {state}"
    10. }
    11. let first = Ticket { title: "Docs", status: Status.Open() }
    12. let second = Ticket { title: "Tests", status: Status.Closed() }
    13. io.writeLine(describe(first))
    14. io.writeLine(describe(second))
    Зафиксированный выводКод завершения 0
    data-and-patterns.tpz: types-ok (2 modules)
    data-and-patterns.tpz: resolve-ok (2 modules)
    
    $ topaz check data-and-patterns.tpz --compiler self · Зафиксировано с Топазом 5.21.3
    Ожидаемый результат

    Ожидаемый результат

    Проверка принимает программу. Код завершения 0.

    Наблюдаемые утверждения · Пройдено · 5.21.3

    Код завершения 0.

    Наблюдаемый стандартный вывод
    1. data-and-patterns.tpz: types-ok (2 modules)
    2. data-and-patterns.tpz: resolve-ok (2 modules)

    Нет вывода ошибок.

    • Пройдено · expected 0; observed 0

    Expect exit 0. If checking fails, follow the reported diagnostic, correct the source, and check again.

    3. Run both cases

    Ссылка

    Print both ticket states

    Ссылка
    data-and-patterns.tpzPrint both ticket statesОткрыть песочницу →
    1. import std.io
    2. enum Status { Open, Closed }
    3. record Ticket { title: string, status: Status }
    4. function describe(ticket: Ticket) -> string {
    5. let state = match (ticket.status) {
    6. case Open() => "open"
    7. case Closed() => "closed"
    8. }
    9. return "{ticket.title}: {state}"
    10. }
    11. let first = Ticket { title: "Docs", status: Status.Open() }
    12. let second = Ticket { title: "Tests", status: Status.Closed() }
    13. io.writeLine(describe(first))
    14. io.writeLine(describe(second))
    Зафиксированный выводКод завершения 0
    Docs: open
    Tests: closed
    
    $ topaz run data-and-patterns.tpz --compiler self · Зафиксировано с Топазом 5.21.3
    Ожидаемый результат

    Ожидаемый результат

    Выполнение завершается. Код завершения 0.

    Ожидаемый стандартный вывод
    1. Docs: open
    2. Tests: closed
    Наблюдаемые утверждения · Пройдено · 5.21.3

    Код завершения 0.

    Наблюдаемый стандартный вывод
    1. Docs: open
    2. Tests: closed

    Нет вывода ошибок.

    • Пройдено · expected 0; observed 0
    • Пройдено · stdout matches the authored expectation
    • Пройдено · stderr matches the authored expectation

    The two calls exercise both cases used by describe.

    Verification

    Ссылка

    Public Topaz 5.21.3 checked and ran this program successfully in Docs run 42224592687, attempt 2. The recorded exit codes and output were compared with this page's current product assertions. The fixture files, invocation and expected output were unchanged.

    Records, enums and newtypes defines the declarations used here. Pattern matching defines variant patterns, case selection and match coverage.

    Next steps

    Ссылка

    Functions and generics →

    check →

    std.io.writeLine →

    Continue with Generic functions and protocols. For parameter and return syntax, use Functions and generics.

    Меню

    Загрузка →