Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpAnTd 112 of 288 menu
◀ ▶

Сравнение меток вида в Rust

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

Сравним метки для целого и для строки:

use std::any::TypeId; fn main() { let int_a = TypeId::of::<i32>(); let int_b = TypeId::of::<i32>(); let text = TypeId::of::<String>(); println!("{}", int_a == int_b); println!("{}", int_a == text); }

На экране true и false. Порядок переменных не меняет метку: важен только сам тип в скобках.

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

use std::any::TypeId; type Score = i32; struct Tag { name: String, } fn main() { let plain = TypeId::of::<i32>(); let alias = TypeId::of::<Score>(); let tag = TypeId::of::<Tag>(); println!("{}", plain == alias); println!("{}", plain == tag); }

Даны типы в одной программе: f64, bool и снова f64. Скажите, какие пары меток вида будут равны.

Дана строка:

use std::any::TypeId; let left = TypeId::of::<i32>(); let right = TypeId::of::<i32>();

Скажите, что напечатает сравнение left == right.

Дано число:

let num = 2;

Скажите, изменится ли метка вида для i32, если в программе вместо этого литерала использовать другое целое того же типа.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить