속성

속성은 모듈, 크레이트 또는 아이템에 붙이는 메타데이터로, 다음과 같은 상황에 사용할 수 있습니다:

속성은 #[outer_attribute]#![inner_attribute]와 같이 표기하며, 각각에 따라 적용하는 지점이 다릅니다.

  • #[outer_attribute]는 이어지는 항목에 바로 적용됩니다. 예를 들어 함수, 모듈 선언, 상수, 구조체, enum 등이 있습니다. 구조체 Rectangle에 attribute #[derive(debug)]가 적용되는 예를 들어보겠습니다:

    #![allow(unused)]
    fn main() {
    #[derive(Debug)]
    struct Rectangle {
        width: u32,
        height: u32,
    }
    }
  • #![inner_attribute]는 이를 포함하는 아이템 (보통 모듈 또는 크레이트) 전체에 적용됩니다. 즉, 이는 배치된 모든 스코프에 적용하는 것으로 해석됩니다. main.rs에 배치함으로서 #![allow(unused_variables)]가 크레이트 전체에 적용되는 예를 들어보겠습니다:

    #![allow(unused_variables)]
    
    fn main() {
        let x = 3; // This would normally warn about an unused variable.
    }

속성은 여러 방식으로 인수를 받을 수 있습니다:

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

인수를 여러 개 받을 수도, 여러 줄에 걸쳐 받을 수도 있습니다:

#[attribute(value, value2)]


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