Справочник

Неподдерживаемые формы

Найдите поддерживаемую замену, если Топаз отклоняет форму, которую не поддерживает.

Если topaz check отклоняет привычную запись, найдите ниже её замену в Топазе. Для возможностей без прямой замены выберите подходящий способ получить нужный результат.

Запустите поддерживаемые формы

Установите Топаз по разделу Первая программа и сохраните код в unsupported-forms.tpz.

TOPAZ
import std.io

let mut количество = 0
let значения: Array<int> = [1, 2]
let преобразовать: (int) -> int = значение => значение + 1

match значения {
    case [голова, ..хвост] => {
        количество = преобразовать(голова) + хвост.length
    }
    case [] => {
        количество = 0
    }
}

io.writeLine("{количество}")

В папке с файлом выполните проверку и запуск.

BASH
topaz check unsupported-forms.tpz
topaz run unsupported-forms.tpz

Проверка проходит, программа выводит следующий результат.

Вывод
3

Объявление let mut разрешает менять количество. Шаблон связывает голова с 1, а хвост с [2]. Вызов преобразовать(голова) возвращает 2. Прибавление длины хвоста даёт 3. Тип (int) -> int описывает функцию, сохранённую в преобразовать.

Замените неподдерживаемую запись

Если вы написалиИспользуйте
mut let count = 0let mut count = 0
count++ или count--count = count + 1 или count = count - 1
[T] как типArray<T>
function(T) -> U как тип(T) -> U
args: ...T...args: T
[head, ...tail][head, ..tail]
Анонимную function (...) { ... }Лямбду, например value => value + 1
Обратные кавычки или ${value}Двойные кавычки и интерполяцию {value}
Индекс или .length у строкиtext.scalars(), затем операции Array

Если в unsupported-forms.tpz заменить let mut на mut let, проверка завершится ошибкой. Верните объявление let mut количество, затем снова проверьте и запустите файл.

При импорте укажите нужные члены модуля. Экспортируемые объявления помечайте словом export в месте объявления. Формы показаны в разделе Модули и видимость. use, строковые и шаблонные пути модулей, списки export, экспорт всех имён, повторный экспорт и переименование при экспорте не поддерживаются.

Выберите альтернативу неподдерживаемой возможности

Следующие возможности недоступны в текущем языке. Альтернативы решают указанные задачи, но могут потребовать изменения структуры программы.

ЗадачаНеподдерживаемая возможностьДоступный выбор
Исследовать текстAPI кластеров графем и прямые срезы строкscalars(), если подходит разделение по скалярам Unicode
Создать текст или структурированный шаблонHTML и пользовательские тегиСтроки или встроенные p, r, sh, sql по назначению
Задать требования к обобщениямОграничения высших рангов и общая динамическая диспетчеризация протоколовОграничения именованных функций из раздела Функции и обобщения
Описать рекурсивные данныеРекурсивные псевдонимы типовПоддерживаемые объявления enum из раздела Записи и номинальные данные
Поделиться объявлениями между модулямиПовторный экспорт пакетовИмпорт членов из объявившего их модуля
Развернуть элементыОбщее разворачивание итерируемых значенийРазворачивание Array в поддерживаемых позициях или явный цикл
Выполнить работу одновременноasync и awaitconcurrent, если подходит сбор именованных результатов с тайм-аутом
Закрыть ресурсыАсинхронная очисткаСинхронный defer или поддерживаемые формы using
Обработать ожидаемый сбойПерехват ошибок выполнения и panic, throw, catchВозврат исправимых ошибок в Result
Прочитать опциональное поле в конвейереСокращённая запись опционального поля в конвейереЯвное выражение с ?.

Топаз не поддерживает наследование классов и рефлексию для изучения структуры программы во время выполнения. Нет и полиморфизма строк записей, который позволяет оставлять часть полей обобщённого типа записи неопределённой. Модель данных описана в разделе Записи и номинальные данные. Числовые типы не преобразуются неявно, поэтому int не становится автоматически float внутри выражения.

Ошибка выполнения останавливает программу. Смена синтаксиса не превращает её в исправимую ошибку Result. Предотвратите недопустимую операцию или используйте API, возвращающий ошибку как значение. Подробнее в разделе Null, Option, Result и ошибки выполнения.

Формы Rust &self, &mut self, Vec<T> и use crate:: не входят в синтаксис Топаза. Используйте impl Name на уровне модуля, встроенные коллекции, явный импорт и обновление записей Топаза.

Примеры собраны в Кратком обзоре синтаксиса. Для исправления операторов откройте Операторы и выражения.