注意: 最新版のドキュメントをご覧ください。この第1版ドキュメントは古くなっており、最新情報が反映されていません。リンク先のドキュメントが現在の Rust の最新のドキュメントです。
Rustでは以下のように「アトリビュート」によって宣言を修飾することができます。
fn main() { #[test] fn foo() {} }
#[test]
または以下のように:
fn main() { mod foo { #![test] } }
#![test]
2つの違いは !
に有ります、 !
はアトリビュートが適用されるものを変更します:
#[foo] struct Foo; mod bar { #![bar] }
#[foo]
アトリビュートは次のアイテムに適用され、この場合は struct
宣言に適用されます。
#![bar]
アトリビュートは #![bar]
アトリビュートを囲んでいるアイテムに適用され、この場合は mod
宣言に適用されます。
その他の点については同じであり、どちらも適用されたアイテムの意味を変化させます。
例を挙げると、たとえば以下の様な関数では:
fn main() { #[test] fn check() { assert_eq!(2, 1 + 1); } }#[test] fn check() { assert_eq!(2, 1 + 1); }
この関数は #[test]
によってマークされており、これは テスト を走らせた時に実行されるという特別な意味になります。
通常通りにコンパイルをした場合は、コンパイル結果に含まれません。この関数は今やテスト関数なのです。
アトリビュートは以下のように、追加のデータを持つことができます:
fn main() { #[inline(always)] fn super_fast_fn() { } }#[inline(always)] fn super_fast_fn() {
また、キーと値についても持つことができます:
fn main() { #[cfg(target_os = "macos")] mod macos_only { } }#[cfg(target_os = "macos")] mod macos_only {
Rustのアトリビュートは様々なことに利用されます。 すべてのアトリビュートのリストは リファレンス に載っています。 現在は、Rustコンパイラによって定義されている以外の独自のアトリビュートを作成することは許可されていません。