Rust 1.7.0 语法基础 attribute

一、语法

attribute : '#' '!' ? '[' meta_item ']' ;
meta_item : ident [ '=' literal  | '(' meta_seq ')' ] ? ;
meta_seq : meta_item [ ',' meta_seq ] ? ;

二、说明

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

Rust attribute 用于在源代码中标识编译过程中的判断条件和上下文环境。

语法中单引号扩起来的内容表示字符原来的含义;
字符后面的?表示通配符,用来表示前面字符的数量;
[] 方括号表示扩起来的内容是可选项,注意这里的[]方括号没有被单引号扩起来;
每行最后以分号表示这一行定义的结束;
表示前后内容可以任意选择其一;

1、第一行语法解释

attribute : '#' '!' ? '[' meta_item ']' ;

attribute :表示冒号后面是 attribute 的定义;
# 所有的 attribute 以#开始;
!? 问号❓是一个通配符,表示前面的字符!只能有 0 个或者 1个;

#!的形式,表示这个属性应用在当前的crate。
# 的形式,表示这个属性应用在跟随在 attribute 下面的代码。

#![meta_item]
#[meta_item]

meta_item 解释如下。

2、第二行语法解释

在第一行语法中包含的 meta_item 的定义展开

meta_item : ident [ '=' literal  | '(' meta_seq ')' ] ? ;

ident 是一组 Rust 定义好的 key,用以标识attribute的作用。key值参见 Rust Attribute的十三个分类包含的注释

meta_item 以一个 ident 开始,表明这个 attribute 的目标;
ident后面可以用 等号赋值,形成 key = value 的形式,或者
ident后面可以跟一个小括号 (),括号内是 meta_seq
[] 表示 ident= literal 或者 ident ( ) 可以任选其一
? 表示前面[]中的任选其一的内容可以并尽有 0 个 或者 1个。

3、第三行语法解释

上面的语法中,meta_seq 是包含在后一种选择情况的括号里,
因此,这里的 meta_item 等同于 ident(meta_seq)

meta_seq : meta_item [ ',' meta_seq ] ? ;

[]表示扩起来的内容可选
? 表示可以有 0 个或者 1个
如果有,形式是

ident ( meta_seq , meta_seq )

因为 meta_seq 又指向自身,故有

ident ( meta_seq [, meta_seq]*)

`* `也是通配符,表示可以有 0 到任意多个

三、举例

    //下面的 attribute 用于 crate
    #![crate_type = "lib"]
    #![allow(dead_code)]
    #![feature(intrinsics, lang_items)]
    //下面的 attribute 用于测试运行代码后面
    #[test]
    fn test_function(){
       ...
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值