• 属性

    属性

    attributes.md


    commit bd8d27beb54ef2a7bb4162d43006792f9ceae361

    在 Rust 中声明可以用“属性”标注,它们看起来像:

    1. #[test]
    2. # fn foo() {}

    或像这样:

    1. # mod foo {
    2. #![test]
    3. # }

    这两者的区别是!,它改变了属性作用的对象:

    1. #[foo]
    2. struct Foo;
    3. mod bar {
    4. #![bar]
    5. }

    #[foo]作用于下一个项,在这就是struct声明。#![bar]作用于包含它的项,在这是mod声明。否则,它们是一样的。它们都以某种方式改变它们附加到的项的意义。

    例如,考虑一个像这样的函数:

    1. #[test]
    2. fn check() {
    3. assert_eq!(2, 1 + 1);
    4. }

    它被标记为#[test]。这意味着它是特殊的:当你运行测试,这个函数将会执行。当你正常编译时,它甚至不会被包含进来。这个函数现在是一个测试函数。

    属性也可以有附加数据:

    1. #[inline(always)]
    2. fn super_fast_fn() {
    3. # }

    或者甚至是键值:

    1. #[cfg(target_os = "macos")]
    2. mod macos_only {
    3. # }

    Rust属性被用在一系列不同的地方。在参考手册中有一个属性的全表。目前,你不能创建你自己的属性,Rust 编译器定义了它们。