当前位置: 首页 > 编程笔记 >

Rust 片段说明符—模式的种类

潘璞瑜
2023-03-14
本文向大家介绍Rust 片段说明符—模式的种类,包括了Rust 片段说明符—模式的种类的使用技巧和注意事项,需要的朋友参考一下

示例

在中$e:expr,expr称为片段说明符。它告诉解析器该参数$e期望什么样的令牌。Rust提供了多种片段说明符,使输入非常灵活。

说明符 描述 例子
ident 识别码 x, foo
path 合格名称 std::collection::HashSet, Vec::new
ty 类型 i32,&T,Vec<(char, String)>
expr 表达 2+2,f(42),if true { 1 } else { 2 }
pat 模式 _,c @ 'a' ... 'z',(true, &x),Badger { age, .. }
stmt 声明 let x = 3, return 42
block 括号分隔的块 { foo(); bar(); }, { x(); y(); z() }
item 项目 fn foo() {},struct Bar;,use std::io;
meta 属性内部 cfg!(windows), doc="comment"
tt 令牌树 +,foo,5,[?!(???)]

请注意,文档注释/// comment的处理方式与#[doc="comment"]宏相同。

macro_rules! declare_const_option_type {
    (
        $(#[$attr:meta])*
        const $name:ident: $ty:ty as optional;
    ) => {
        $(#[$attr])*
        const $name: Option<$ty> = None;
    }
}

declare_const_option_type! {
    ///一些文档评论
    const OPT_INT: i32 as optional;
}

// 以上内容将扩展为:
#[doc="some doc comment"]
const OPT_INT: Option<i32> = None;

按照设定

某些片段说明符要求标记,它后面必须是一个受限制的集合之一,称为“跟随集合”。这为Rust的语法发展提供了一定的灵活性,而又不会破坏现有的宏。

说明符 按照设定
expr, stmt =>  ,  ;
ty, path => , = | ; : > [ { as where
pat => , = | if in
ident,block,item,meta,tt 任何令牌

macro_rules! invalid_macro {
    ($e:expr + $f:expr) => { $e + $f };
//           ^
//           +不在expr的跟随集中,
//           因此编译器将不接受此宏定义。
    ($($e:expr)/+) => { $($e)/+ };
//             ^
//             分隔符`/`不在`expr`的跟随集中
//             因此编译器将不接受此宏定义。
}
           

 类似资料:
  • 说我想打印: 这是正确的。这: 或者这个: ? 事情是在其他地方,所以我遇到了这样的讨论: -即使ch变为无符号字符,代码的行为也不是由C标准定义的。这是因为无符号字符被提升为int(在普通的C实现中),所以int被传递给printf的说明符%u。但是,%u需要一个无符号int,所以类型不匹配,并且C标准没有定义该行为 -你的评论不正确。C11标准规定转换说明符必须与函数参数本身的类型相同,而不是

  • 问题内容: 是什么使图像变成1x,2x或3x(@ 1x,@ 2x,@ 3x)?如何制作3x图像? 问题答案: iOS在其坐标系中使用点而不是像素。在原始的非视网膜设备(iPhone,iPhone3G,iPhone3GS,iPad,iPad 2,iPadmini和早期的iPodtouch)中,坐标系中的一个点映射到设备屏幕上的一个像素。那时,生活很简单,您为应用程序提供了映射到点大小的图像,并且一切

  • DoitPHP的CLI模式是指DoitPHP在命令行下运行。由于在命令行下,即不支持$_POST,也不支持$_GET等,所以注定了CLI模式下运行DoitPHP框架编写的程序有所不同。 首先、入口文件内容不一样。非CLI模式运行下的入口文件(默认index.php)的代码内容为: use doitphp\App; define('IN_DOIT', true); /** * 定义项目所在路径(根

  • 本文向大家介绍Fortran 分配格式说明符,包括了Fortran 分配格式说明符的使用技巧和注意事项,需要的朋友参考一下 示例 在Fortran 95之前,可以将分配的格式用于输入或输出。考虑 该assign语句将语句标签分配给整数变量。以后将此整数变量用作print语句中的格式说明符。 在Fortran 95中删除了这种格式说明符分配。相反,更现代的代码可以使用其他形式的执行流控制 或字符变量

  • 本文向大家介绍Django Model中字段(field)的各种选项说明,包括了Django Model中字段(field)的各种选项说明的使用技巧和注意事项,需要的朋友参考一下 字段与选项 CharField() 字符字段 max_length = xxx or None # 必选项 blank = True 和 default = '' # 如果不是必填项,可以设置 unique = True