正式开始
链接
新鲜知识点
- cargo build --release,编译出 release 版本
常用库推荐
- 命令行解析工具 clap
- HTTP 客户端 reqwest
- 终端格式化输出 colored
- 语法高亮库 syntect
- 错误处理:anyhow
- 格式化JSON:jsonxf
- 处理MIME类型:mimi
- 异步处理:tokio
精选问答
-
以下代码没有实现 trait impl for String, 为啥可以call blue on String type呢?
format!("{:?} {}", resp.version(), resp.status()).blue();a. Colorize trait 的定义中,方法 consume 的都是 self,而非 &self。所以当 impl Colorize for &str 时,self = &str
b. 在调用方法时,编译器会先看数据结构是否有对应的方法,如果有,按照方法的 signature,传 self / &self / &mut self。
c. 如果没有,再看引入的 trait 是否有对应的方法,必要时会根据 self 的类型做 auto Deref。所以这里编译器可以找到 blue(),因为它第一个参数 self = &str,String 可以 Deref 到 &str,所以可以调用。
d. 演示代码
-
Rust里面的宏跟Python里面装饰器的区别
a. 宏可以操作并修改代码的 AST,装饰器只能对代码简单包装,无法改动 AST