属性
属性は、何らかのモジュール、クレート、またはアイテムに適用されるメタデータです。このメタデータは、次の用途に使用できます。
- コードの条件付きコンパイル
- クレート名、バージョン、種類(バイナリまたはライブラリ)の設定
- リント(警告)の無効化
- コンパイラ機能(マクロ、グロブインポートなど)の有効化
- 外部ライブラリへのリンク
- 関数をユニットテストとしてマーク
- ベンチマークの一部となる関数をマーク
- 属性風マクロ
属性は #[outer_attribute] または #![inner_attribute] のような形式で、 両者の違いは適用される場所です。
-
#[outer_attribute]は、その直後に続くアイテムに適用されます。 アイテムの例としては、関数、モジュール宣言、定数、構造体、enum などがあります。 次の例では、属性#[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; // これは通常、未使用の変数に関する警告を出します。 }
属性は、異なる構文で引数を取ることができます。
#[attribute = "value"]#[attribute(key = "value")]#[attribute(value)]
属性は複数の値を持つことができ、複数行に分けることもできます。
#[attribute(value, value2)]
#[attribute(value, value2, value3,
value4, value5)]