Rust 编译注释 Attribute

使用Java的人都知道,Java有个 annotation 注释。 Rust 也有注释,名称和C#的注释一样,叫做 attribute。

Rust 的attribute 与 Java annotation以及 C# 的attribute注释一样,是在编译阶段用于为编译提供更多描述信息,以便在编译的时候可以根据这些描述做出一些动态的选择和设置。

 

一、Rust 的 attribute 种类

Rust 包括两种 attribute :

第一种是:

#![attribute属性描述]

这种#后面有一个!的形式,表示这个属性值应用在当前的对象。通常,这样的attribute是针对当前文件设置的。当前文件可能包括两种对象,一个是crate,另一个可能是module。需要根据文件的上下文来判断。

判断的依据是,如果是src/mod.rs 或者 src/lib.rs 那么这个设置就是针对 crate 的,因为这两个文件是crate的root module。

例如:

#![crate_type = "lib"]

第二种是:

#[attribute属性描述]    

这种前面只有#号的属性,表示属性的设置应用到属性下面的功能函数上的(当然,除了功能函数,还有其他类型的对象)。

// TODO  介绍crate 下面包含的其他子对象

例如:

#[test]

 

二、Rust 的 attribute 书写形式

attribute 属性描述包括三种形式:
1、用简单的attribute属性名,这些属性名是由Rust定义的,例如:

#[test]

2、用key=value的形式,key是是Rust定义的属性名,例如:

#![crate_type = "lib"]

3、用属性名(subAttribute1,subAttribute2,key=value),例如:

#[allow(non_camel_case_types, unused)]
#[cfg(target_os="linux")]
//TODO 介绍Rust中现存的可以使用的 attribute

 一、语法 attribute : '#' '!' ? '[' meta_item ']' ;meta_item : ident [ '=' literal | '(' meta_seq ')' ] ...