Структура программы

Запрещённые и отложенные формы

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

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

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

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

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

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

print("{количество}")

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

BASH
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.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

Если в forbidden-deferred.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
Прочитать опциональное поле в конвейереСокращённая запись опционального поля в конвейереЯвное выражение с ?.

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

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

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