库(箱)
库中包含文件:
crate
└── front_of_house
├── hosting
│ ├── add_to_waitlist
│ └── seat_at_table
└── serving
├── take_order
├── serve_order
└── take_payment
使用#[macro_use] 可以使被注解的module模块中的宏被应用(替换)到当前作用域中;
或者注释crate中的宏应用到当前crate作用域中。
总之:
1,引入其他文件(模块)定义的宏
2,引入其他库的宏。
#[macro_use]
extern crate log;
引入log库中的宏
在每个宏定义前面添加 #[macro_export]注释,表示这些宏可以被外部的 crate 使用。
anyhow库中包含有有一些Error特征,包括Result
而且使用起来更方便。
引入anyhow之后,使用Result等价于anyhow::Result
使用需引入依赖包:
[dependencies]
anyhow = "1.0"
就是按照指定的条件进行编译,它允许你基于一个传递给编译器的标记编译代码。
所有的#[ ]都是标注者位置以下的代码的属性。
条件编译可能通过两种不同的操作:
cfg 属性:在属性位置中使用 #[cfg(...)]cfg! 宏:在布尔表达式中使用 cfg!(...)- fn main(){
- #[cfg(not(windows))]
- println!("do--not windows");
- #[cfg(linux)]
- println!("do--linux");
- if cfg!(target_os="linux"){
- println!("cfg!--linux");
- }
- if cfg!(target_os="windows"){
- println!("cfg!--windows");
- }
- }
-
- cfg!一定要有的等号
- 注意有等号时有""
使用不需要引入模块
use指定路径两种方法:
1,::
2,{ }
- mod windiws{
- pub mod ipc;
- }
所有文件操作只需要引入:
File,OpenOptions
- use std::fs::{File,OpenOptions};
- fn main(){
- let file=OpenOptions::new().read(true).write(true).create(true).open("foo.txt");
- }
用字符串给匹配给某个数据类型
- use serde::{Deserialize,Serialize};
- use serde_json::{self,Result};
- use anyhow;
-
- #[derive(Deserialize, Debug)]
- struct Student{
- name:String,
- age:i32
- }
- fn main()->anyhow::Result<()>{
- let s=r#"{"name":"fangfang","age":12}"#;
- let st1:Student=serde_json::from_str(s)?;
- println!("{:?}",st1);
- Ok(())
- }
-
- 1,main函数有返回值就一定要在函数名之后加上返回值;
- 2,使用的字符串一定要用R# #包起来;
- 3,数据结构的字段用”“引起了,:后面是字段值