attributes.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d
在Rust中聲明可以用“屬性”標(biāo)注,它們看起來(lái)像:
#[test]
# fn foo() {}
或像這樣:
# mod foo {
#![test]
# }
這兩者的區(qū)別是!
,它改變了屬性作用的對(duì)象:
#[foo]
struct Foo;
mod bar {
#![bar]
}
#[foo]
作用于下一個(gè)項(xiàng),在這就是struct
聲明。#![bar]
作用于包含它的項(xiàng),在這是mod
聲明。否則,它們是一樣的。它們都以某種方式改變它們附加到的項(xiàng)的意義。
例如,考慮一個(gè)像這樣的函數(shù):
#[test]
fn check() {
assert_eq!(2, 1 + 1);
}
它被標(biāo)記為#[test]
。這意味著它是特殊的:當(dāng)你運(yùn)行[測(cè)試](Testing 測(cè)試.md),這個(gè)函數(shù)將會(huì)執(zhí)行。當(dāng)你正常編譯時(shí),它甚至不會(huì)被包含進(jìn)來(lái)。這個(gè)函數(shù)現(xiàn)在是一個(gè)測(cè)試函數(shù)。
屬性也可以有附加數(shù)據(jù):
#[inline(always)]
fn super_fast_fn() {
# }
或者甚至是鍵值:
#[cfg(target_os = "macos")]
mod macos_only {
# }
Rust屬性被用在一系列不同的地方。在參考手冊(cè)中有一個(gè)屬性的全表。目前,你不能創(chuàng)建你自己的屬性,Rust編譯器定義了它們。