Атрибути
Атрибут — це метадані, застосовані до деякого модуля, крейту або елемента. Ці метадані можна використовувати для/для:
- умовної компіляції коду
- задання назви крейту, версії та типу (бінарний або бібліотека)
- вимкнення лінтів (попереджень)
- увімкнення можливостей компілятора (макроси, глобальні імпорти тощо)
- прив’язування до зовнішньої бібліотеки
- позначення функцій як модульних тестів
- позначення функцій, які будуть частиною бенчмарку
- макросів, схожих на атрибути
Атрибути мають вигляд #[outer_attribute] або #![inner_attribute],
а різниця між ними полягає в тому, де вони застосовуються.
-
#[outer_attribute]застосовується до елемента, що безпосередньо йде після нього. Деякі приклади елементів: функція, оголошення модуля, константа, структура, перелік. Ось приклад, де атрибут#[derive(Debug)]застосовується до структуриRectangle:#![allow(unused)] fn main() { #[derive(Debug)] struct Rectangle { width: u32, height: u32, } } -
#![inner_attribute]застосовується до зовнішнього елемента (зазвичай модуля або крейту). Іншими словами, цей атрибут інтерпретується як такий, що застосовується до всієї області видимості, у якій він розміщений. Ось приклад, де#![allow(unused_variables)]застосовується до всього крейту (якщо розміщено вmain.rs):#![allow(unused_variables)] fn main() { let x = 3; // This would normally warn about an unused variable. }
Атрибути можуть приймати аргументи з різним синтаксисом:
#[attribute = "value"]#[attribute(key = "value")]#[attribute(value)]
Атрибути можуть мати кілька значень і також можуть бути розбиті на кілька рядків:
#[attribute(value, value2)]
#[attribute(value, value2, value3,
value4, value5)]