Приложение A: Ключевые слова
Следующий список содержит ключевые слова, зарезервированные для текущего или будущего использования в языке Rust. Как таковые их нельзя использовать в качестве идентификаторов (за исключением сырых идентификаторов, которые мы обсудим в разделе «Сырые идентификаторы»). Идентификаторы — это имена функций, переменных, параметров, полей структур, модулей, крейтов, констант, макросов, статических значений, атрибутов, типов, свойств или времён жизни.
Ключевые слова, использующиеся в Rust в настоящее время
Ниже приведён список используемых в настоящее время ключевых слов с описанием их функций.
as
— выполнить примитивное преобразование, уточнить конкретную характеристику, которую содержит объект, или переименовать элемент в выраженииuse
async
— вернутьFuture
вместо блокирования текущего потокаawait
— немедленно завершить цикл приостановить выполнение до тех пор, пока не будет готов результатFuture
break
— немедленно завершить циклconst
— определить константу или неизменяемый указательcontinue
— досрочно перейти к следующей итерации циклаcrate
— в пути модуля ссылается на корень пакетаdyn
— динамическая отсылка к объекту характеристикиelse
— ветвь для конструкций потока управленияif
иif let
в случае, если никакая другая ветвь не была исполненаenum
— определить перечислениеextern
— подключить внешнюю функцию или переменнуюfalse
— логический литерал «ложь»fn
— определить функцию или тип указателя на функциюfor
— перебор элементов итератора, реализация типажа или указание срока жизни более продолжительного периодаif
— ветвление на основе результата условного выраженияimpl
— реализовать функциональность непосредственно или через типажin
— часть синтаксиса определения циклаfor
let
— объявить переменнуюloop
— безусловный (бесконечный) циклmatch
— сопоставить значение с образцамиmod
— определить модульmove
— заставить замыкание принять на себя владение всеми своими захватамиmut
— обозначить изменяемость для ссылок, сырых указателей или привязок к шаблонамpub
— обозначить публичную доступность полей структур, блоковimpl
или модулейref
— привязка по ссылкеreturn
— возврат из функцииSelf
— псевдоним для типа, который мы определяем или реализуемself
— объект, содержащий этот метод, или текущий модульstatic
— глобальная переменная или время жизни на протяжении всего выполнения программыstruct
— определить структуруsuper
— родительский модуль текущего модуляtrait
— определить типажtrue
— логический литерал «истина»type
— определить псевдоним типа или ассоциированный типunion
— определение union (объединения); является ключевым словом только при использовании в объявлении объединенияunsafe
— обозначить небезопасный код, функции, типажа или реализацииuse
— ввести объекты в область видимостиwhere
— обозначить утверждения, которые ограничивают типwhile
— цикл, работающий относительно результата условного выражения
Ключевые слова, зарезервированные для будущего использования
Следующие ключевые слова ещё не имеют никакой функциональности, но зарезервированы Rust для возможного использования в будущем.
abstract
become
box
do
final
macro
override
priv
try
typeof
unsized
virtual
yield
Сырые идентификаторы
Сырые идентификаторы — это синтаксис, позволяющий использовать ключевые слова там, где обычно они не могут быть. Для создания и использования сырого идентификатора к ключевому слову добавляется префикс r#
.
Например, ключевое слово match
. Если вы попытаетесь скомпилировать следующую функцию, использующую в качестве имени match
:
Файл: src/main.rs
fn match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
вы получите ошибку:
error: expected identifier, found keyword `match`
--> src/main.rs:4:4
|
4 | fn match(needle: &str, haystack: &str) -> bool {
| ^^^^^ expected identifier, found keyword
Ошибка говорит о том, что вы не можете использовать ключевое слово match
в качестве идентификатора функции. Чтобы получить возможность использования слова match
в качестве имени функции, нужно использовать синтаксис «сырых идентификаторов», например так:
Файл: src/main.rs
fn r#match(needle: &str, haystack: &str) -> bool { haystack.contains(needle) } fn main() { assert!(r#match("foo", "foobar")); }
Этот код скомпилируется без ошибок. Обратите внимание, что префикс r#
в определении имени функции указан так же, как он указан в месте её вызова в main
.
Сырые идентификаторы позволяют вам использовать любое слово, которое вы выберете, в качестве идентификатора, даже если это слово окажется зарезервированным ключевым словом. Это даёт нам больше свободы в выборе имён идентификаторов, а также позволяет нам интегрироваться с программами, написанными на языке, где эти слова не являются ключевыми. Кроме того, необработанные идентификаторы позволяют вам использовать библиотеки, написанные в версии Rust, отличной от используемой в вашем крейте. Например, try
не является ключевым словом в выпуске 2015 года, но есть в выпуске 2018 года. Если вы зависите от библиотеки, написанной с использованием версии 2015 года и имеющей функцию try
, вам потребуется использовать синтаксис сырого идентификатора, в данном случае r#try
, для вызова этой функции из кода версии 2018 года. См. Приложение E для получения дополнительной информации о редакциях Rust.