#[attributes]

Attribute là metadata được apply cho một số module, crate hoặc item. Metadata này được dùng cho việc:

  • conditional compilation of code: compile code theo điều kiện, ví dụ một số code sẽ chỉ được compile cho tests, cho OS cụ thể, cho một số feature nào đó, etc.

    // This function only gets compiled if the target OS is linux
    #[cfg(target_os = "linux")]
    fn are_you_on_linux() {
        println!("You are running linux!");
    }
    
    // And this function only gets compiled if the target OS is *not* linux
    #[cfg(not(target_os = "linux"))]
    fn are_you_on_linux() {
        println!("You are *not* running linux!");
    }
    
  • set crate name, version and type (binary or library)

    // This crate is a library
    #![crate_type = "lib"]
    // The library is named "rary"
    #![crate_name = "rary"]
    
    pub fn public_function() {
        println!("called rary's `public_function()`");
    }
    
  • disable lints (warnings)

  • bật một số tính năng của compiler (macros, glob imports, etc.)

  • link đến foreign library

  • đánh dấu các function là unit tests

    #[test]
    fn test_hello() {
        assert!("hello");
    }
    
  • đánh dấu function là một phần của benchmark

Khi một attributes được apply cho cả crate, cú pháp là #![crate_attribute]. Khi apply cho một module hoặc item, cú pháp là #[item_attribute] (không có dấu !).

Attributes cũng có thể có tham số:

  • #[attribute = "value"]
  • #[attribute(key = "value")]
  • #[attribute(value)]

Attributes có thể có nhiều giá trị, có thể break thành nhiều dòng:

#[attribute(value, value2)]

#[attribute(value, value2, value3,
            value4, value5)]