В Rust есть два типа констант, которые могут быть объявлены в любой области видимости, включая глобальную. Оба требуют явной аннотации типа:
const
: Неизменяемая переменная (в общем случае).static
: Возможно, изменяемая переменная со ['static
][статическим] временем жизни.Частным случаем является литерал "string"
. Он может быть напрямую
назначен переменной с временем жизни static
, т.к сигнатура его типа:
&'static str
требует время жизни 'static
. Для всех остальных ссылочных типов
должно быть указано время жизни 'static
. Это может показаться
незначительным, но в требовании явной аннотации типов и скрываются различия.
// Константы объявлены в глобальной области видимости. static LANGUAGE: &'static str = "Rust"; const THRESHOLD: i32 = 10; fn is_big(n: i32) -> bool { // Получаем доступ к константе внутри функции n > THRESHOLD } fn main() { let n = 16; // Получаем доступ к константе внутри функции main println!("This is {}", LANGUAGE); println!("The threshold is {}", THRESHOLD); println!("{} is {}", n, if is_big(n) { "big" } else { "small" }); // Ошибка! `константы` нельзя изменить. THRESHOLD = 5; // ИСПРАВЬТЕ ^ Закомментируйте эту строчку }