服装电子商务网站版式设计WordPress评论加入ip

pingmian/2025/10/13 12:08:26/文章来源:
服装电子商务网站版式设计,WordPress评论加入ip,百度竞价推广是什么工作,网站title的作用前言 rust 学习曲线非常陡峭#xff0c;但是基本语法也还算挺好理解#xff0c;自动内存管理有点类似智能指针#xff0c;基本看一下语法入门就可以大概理解#xff0c;但是唯独宏很难理解#xff0c;语法非常晦涩。但是功能非常强大。声明宏类似于c语言的宏处理#xf…前言 rust 学习曲线非常陡峭但是基本语法也还算挺好理解自动内存管理有点类似智能指针基本看一下语法入门就可以大概理解但是唯独宏很难理解语法非常晦涩。但是功能非常强大。声明宏类似于c语言的宏处理但是功能更强大。过程宏则类似于Android的注解编程自定义AbstractProcessor但是实现更优雅。 下面记录一下宏处理的一些特点 正文 目前主流的文章都是翻译自官方文档或者取部分Rust语言圣经关键的部分特性就确实只有rust宏详解中非常详细的介绍这里简要记录一下特点 声明宏 声明宏主要是替代主要是通过简单的模式匹配然后进行操作这貌似非常容易处理面向对象的工厂模式或者解决方法多参数操作比如 macro_rules! vec {() ($crate::__rust_force_expr!($crate::vec::Vec::new()));($elem:expr; $n:expr) ($crate::__rust_force_expr!($crate::vec::from_elem($elem, $n)));($($x:expr), $(,)?) ($crate::__rust_force_expr!([_]::into_vec(// This rustc_box is not required, but it produces a dramatic improvement in compile// time when constructing arrays with many elements.#[rustc_box]$crate::boxed::Box::new([$($x),])))); }这就是根据不同的匹配模式的前半部分替换成后半部。比如无参数的vec。因为这是系统接口这里不在详细介绍操作只介绍匹配 ()是无参构造函数。($elem:expr; $n:expr)这是匹配模式类似vec![1;5],这是创造一个size是5的值是1的vec。这个是匹配vec![1, 2, 3]这是构造一个内容是1、2、3的vec 第二个匹配模式中$elem是为匹配的内容命名方便后面使用expr一个表达式 (expression)指明匹配的元素就不用解释就是字面值。$n:expr同样道理。 第二个匹配则稍微复杂一些这里则用的是循环模式。循环是通过$(....)来指明的括号内为循环内容为了方便阅读则需要有分隔符和循环次数这里是通过定义分隔符定义循环至少一次。$(,)?又是一个循环循环内容则是。而循环一次则是最多一次。 所有的语句如下 block一个块比如一块语句或者由大括号包围的一个表达式 expr一个表达式 (expression) ident一个标识符 (identifier)包括关键字 (keywords) item一个条目比如函数、结构体、模块、impl 块 lifetime一个生命周期注解比如 foo、static literal一个字面值比如 “Hello World!”、3.14、‘’ meta一个元信息比如 #[…] 和 #![…] 属性内部的东西 pat一个模式 (pattern) path一条路径比如 foo、::std::mem::replace、transmute::_, int stmt一条语句 (statement) tt单棵标记树 ty一个类型 vis一个可能为空的可视标识符比如 pub、pub(in crate) 循环则如下 反复捕获的一般形式为 $ ( … ) sep rep。 $ 是字面上的美元符号标记 ( … ) 是被反复匹配的模式由小括号包围。 sep 是可选的分隔标记。它不能是括号或者反复操作符 rep。常用例子有 , 和 ; 。 rep 是必须的重复操作符。当前可以是 ?表示最多一次重复所以此时不能前跟分隔标记。*表示零次或多次重复。表示一次或多次重复。 过程宏 分为三类 派生宏Derive macro用于结构体struct、枚举enum、联合union类型可为其实现函数或特征Trait。属性宏Attribute macro用在结构体、字段、函数等地方为其指定属性等功能。如标准库中的#[inline]、#[derive(…)]等都是属性宏。函数式宏Function-like macro用法与普通的规则宏类似但功能更加强大可实现任意语法树层面的转换功能。 声明宏需要解析传入的参数进行匹配而过程宏则需要自己解析传入的内容然后进行补充生成代码。这里需要解析TokenStream举个例子就是用宏为一个结构体实现构建者模式。 #[derive(Builder)] struct Command {// ... }最麻烦的是如何实现Builder #[derive(Builder)] struct Command {input_paht: String,// ... }pub fn derive_builder(input: TokenStream) - TokenStream {let input parse_macro_input!(input as DeriveInput); // 解析input为 DeriveInput类型let input_ident input.ident; // 获取原始类名let ident_builder format_ident!({}Builder, input_ident.to_string()); // 拼接builder类名if let Data::Struct(r) input.data { // 处理结构体let fields r.fields;// 结构体属性声明let builder_fields map_fields(fields, mut |(ident, ty)| {quote!(#ident: Option#ty,) });// 为builder增加set函数let builder_set_fields map_fields(fields, mut |(ident, ty)| {quote!(pub fn #ident(mut self, value: #ty) - Self {self.#ident Some(value);self}) });// 获取builder的属性值let builder_lets map_fields(fields, mut |(ident, _)| {quote!(let #ident self.#ident.ok_or(format!(field {:?} not set yet, stringify!(#ident),))?;)});// 初始化时的默认值let builder_fields_values map_fields(fields, mut |(ident, _)| {quote!(#ident,)});quote!(impl #input_ident {pub fn builder() - #ident_builder {#ident_builder::default()}}#[derive(Default)]pub struct #ident_builder {#builder_fields}impl #ident_builder {#builder_set_fieldspub fn build(self) - Result#input_ident, String {#builder_letsOk(#input_ident{ #builder_fields_values })}}).into()} else {// 不支持非struct类型quote!().into()} }fn map_fieldsF(fields: Fields, mapper:mut F) - TokenStream2 whereF: FnMut((Optionproc_macro2::Ident , Type)) - TokenStream2, {let fs fields.iter().map(|field| mapper((field.ident ,field.ty)) );let stream2 TokenStream2::from_iter(fs);stream2 }这里为Command实现了builder方法如下 impl Command{pub fn builder() - CommandBuilder{CommandBuilder::default()} }pub struct CommandBuilder{input_path: String, }impl CommandBuilder{pub fn (mut self, value: String) - Self {self.input_path Some(value);self}pub fn build(self) - ResultCommand, String {let input_path self.input_path.ok_or(format!(field {:?} not set yet, stringify!(input_path),))?;Ok(Command{ input_path })}}属性宏则可以传入参数让控制更自由一些这里就不在详细介绍 函数式宏则相对比较简单类似声明宏但是可以不去匹配规则更自由功能更强大。 解析TokenStream需要依赖一些库这比较复杂就不在详细介绍。要结合自己代码需求慢慢理解。 分析工具 cargo.exe install cargo-expandcargo.exe expand后记 rust实在是复杂这里解释一些语法规则以后遇到问题再补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家企业公司网站建设网站定制设计价目表

类加载器工作机制:1.装载:将Java二进制代码导入jvm中,生成Class文件。2.连接:a)校验:检查载入Class文件数据的正确性 b)准备:给类的静态变量分配存储空间 c)解析&#xf…

佳木斯做微网站网站设计公司网

Frequent values UVA - 11235 题目传送门 题目大意:给出一个非降序的整数数组a1,a2,a3...an,你的任务是对一系列的询问(i,j),回答ai,ai1,ai2...aj中出现次数最多的值所出现的次数。输入包括多组数据。每组数据第一行…

南宁网站建公司电话号码网站建设计入什么科目

一、winsound "ModuleNotFoundError: No module named winsound" 这个错误表示 Python 解释器找不到名为 winsound 的模块。 winsound 模块是 Python 标准库的一部分,用于在 Windows 系统中进行声音播放。 解决这个问题的步骤如下: 检查 Py…

网页设计与网站建设书如何设计网站导航

文章目录 第七讲第八讲第九讲第十讲 第七讲 1、最简单的状态机-三角波发生器 1、两种状态的代码: //最简单的状态机,三角波发生器; timescale 1ns/10ps module tri_gen(clk,res,d_out); input clk; input res; o…

工程造价信息网查询平台优化是指什么

说到爬虫,大家可能都知道requests、re、scrapy、selenium等等一些工具库。虽然它低调,但功能非常强大,用于抓取Table表格型数据时,简直是个神器,没有必要去F12研究HTML页面结构甚至写正则表达式解析字段。 #我的Pytho…

爱站小工具wordpress 邮件收发

上一篇Windows Container文章中给大家介绍了如何使用Windows Container运行一个传统的.net 4.5 web应用程序,当时我们使用了默认的Visual Studio模版创建了一个简单的项目,而且没有链接数据库。我相信使用.net进行应用开发的程序员们一定在想&#xff0c…

网站建设硬件投入表凡客诚品公司介绍

文章目录 什么是封装和分用?封装应用层传输层网络层数据链路层物理层 分用物理层数据链路层网络层传输层应用层 什么是封装和分用? 我们前面讲过协议会分层,每一层都有各自的功能。而在数据传输的过程中,得按照顺序把每一层协议都…

特色网站建设自己电脑做服务器网站吗

软硬件需求 1)Linux 操作系统要求 2)软件需求 3)开发测试环境 4)生产环境 5)注意事项 (1)FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个GB 不等。 &a…

青岛网站建设培训班矿泉水网站模板

目录 1.创建.proto文件 1.1文件规范 1.2添加注释 1.3指定proto3语法 1.4package声明符 1.5定义消息(message) 1.6定义消息字段 2.编译contacts.proto文件 3.序列化与反序列化的使用 1.创建.proto文件 1.1文件规范 • 创建.proto文件时,⽂件命名应该使用全…

现在帮别人做网站赚钱不wordpress招商加盟

参考资料:生物统计学 从严格意义上讲,两因素试验都应当设置重复观测值,以便检验交互作用是否真实存在,对试验误差有更准确的估计,从而提高检验效率。但根据专业知识或先前的试验已经证明两个因素不存在交互作用时&…

老鹰网网站建设建博客网站

查看路由规则 [rootlocalhost cc]# ip rule list 0: from all lookup local 32765: from 10.0.19.24 lookup 4096 32766: from all lookup main 32767: from all lookup default 现在有 4 条路由规则,优先级是怎样的,0 代表最低优先级还是最高优先级 在…

网站ftp上传到空间济南网站建设公司川芎网络

在开发的时候,发现图片锯齿严重,打包到移动端或者在编辑器都这样,如下图 原因: 查了一些资料,找到了原因如下:关于为什么会发生这种情况:看起来你的源资源比你在屏幕上显示的大小大得多。所以当…

做公司月刊网站杭州最好的电商培训学校

ThinkPHP框架 访问入口文件后在application文件夹中会出现一些文件夹,其中的home文件夹是前端模块,也可以在application文件夹中新建文件夹。home文件夹模块中Conf文件夹的config配置文件,是对于当前模块的:修改当前模式conventio…

网站改版中 模板专业网站建设管理

TimeGPT:首个时间序列分析基础大模型 1. 论文解读1.1 研究背景1.2 TimeGPT详解1.2.1 时间序列预测问题基础1.2.2 TimeGPT架构1.2.3 训练数据集1.2.4 训练TimeGPT1.2.5 不确定性量化1.2.6 实验结果1.2.6.1 Zero-shot 推断1.2.6.2 Fine Tuning1.2.6.3 时间对比1.2.7 讨论2. Time…

松江做网站公司传媒网站设计公司

一、JavaScript包管理器分类 NPMYarnPNPMBun 二、包管理器的区别 1、NPM 是Node.js的默认包管理器,默认随Node.js一起安装,无需额外配置。 npm2 采用简单的递归依赖方法,最后形成高度嵌套的依赖树。然后就会造成如下问题:重复依…

网站如何进行品牌建设怎么在网站上打广告

目录 一、什么是二叉树? 二、二叉树的主要类型 三、二叉树的实现 四、二叉树的应用 五、关于二叉树的题目 引言: 二叉树是计算机科学中常用的一种数据结构,它是由节点组成的层级结构,每个节点最多有两个子节点。在Java编程语言中,二…

刷leetcode对网站开发有用吗淄博建设工程学校官方网站

三种类型的变量: Java中常量的定义: 下面的这个加号表示连接的意思,也就是把前面的字符串常量和后面的变量值在显示时连在一起: 显示效果如下: 如果没有用这个加号,就会报错:

html做的图片网站网络营销外包项目

1、盒模型 盒模型从外到内一次为:margin-box、border-box、padding-box、content-box。 2、一些属性设置的相对位置 ⑴background-position的属性值(top/right/bottom/left/center)起始位置是相对于padding-box外边沿开始的,…

湖北建设厅行政服务中心网站美术生最吃香的专业

1.Socket的黏包 问题:Socket在发送消息时,并不是按照我们发送多大的数据,它就会完封不动的发送给对方,这中间可能存在丢包、数据包顺序不一致、数据包不完整、重复接收到数据包等问题。 方案: a.定义数据协议&#x…