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

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

Замените привычную, но неподдерживаемую запись канонической формой текущего Топаза.

Обратитесь к этому разделу, если topaz check отклоняет синтаксис, знакомый по JavaScript, Python, Rust или ранним версиям Топаза. Привычная запись не становится альтернативным диалектом. Как правило, для неё существует прямая актуальная замена. Если замена отсутствует, возможность недоступна полностью, а не поддерживается частично.

Проверьте программу в текущей записи

Сохраните код в 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, именованный тип коллекции, тип вызываемого значения, лямбда-выражение и шаблон остатка списка.

Замените запись, сохранив смысл

Если вы написалиИспользуйте
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
async или awaitЯвный ограниченный concurrent, если подходит его модель

Для модулей действуют отдельные фиксированные формы. Используйте выборочный import и export перед объявлением из раздела Модули и видимость. Формы use, строковые и шаблонные пути, списки export, wildcard-export, повторный export и переименование при export недоступны.

Некорректные записи выше приведены в виде текста, а не действительных примеров Топаза. Запускайте topaz check до этапа генерации. Общая проверка отклонит их на границе языка, поэтому целевой код не будет домысливать их смысл.

Отложенное не означает обещанное

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

В настоящее время недоступны, среди прочего, кластеры графем и прямые срезы строк, HTML- и пользовательские теги шаблонов, более широкие и высокоранговые ограничения обобщений, рекурсивные псевдонимы типов, широкий вызов протоколов, повторный экспорт пакетов, общее разворачивание итерируемых значений, асинхронная очистка, async/await, перехват ошибок выполнения, panic/throw/catch и сокращение опционального поля в конвейере.

Элементы владения и получателя из Rust &self, &mut self, Vec<T> и use crate:: допустимы только в явно обозначенных материалах об интероперабельности, но не в обычном Топазе. Разворачивание синтаксиса в стиле JavaScript и блоки методов Rust также не становятся синтаксисом Топаза лишь потому, что их способна выразить отдельная целевая платформа.

Актуальные формы собраны в Кратком обзоре синтаксиса. Сведения по операторам смотрите в разделе Операторы и выражения, а структуру программы — в Модули и видимость.