Приложение A: Ключевые слова
Следующий список содержит ключевые слова, зарезервированные для текущего или будущего использования в языке 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.