#1 基础语法学习
#1.1 print
{:?}
可进行有格式的打印,是 Debug 宏的实现#[derive(Debug)]
如要打印结构体数据 需要添加这个’宏定义’
#1.2 display
如果系统的 print
无法满足需求, 可自己实现 display
进行格式化打印。
1 | use std::fmt; // Import the `fmt` module. |
#1.3 trait
trait 实际就是接口的意思。trait 告诉 Rust 编译器某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。
1 | // 声明一个 summary 的 trait, 并且有默认的实现 |
写法1
1 | pub fn notify(item: impl Summary) { |
写法2
1 | pub fn notify<T: Summary>(item: T) { |
上面的 写法1
和 写法2
具有同样的效果,写法1
叫 impl trait
, 写法2
叫 trait bound
。
通过 +
指定多个 trait bound
1 | pub fn notify(item: impl Summary + Display) {} |
当有多个泛型参数,使用where
从句指定 trait bound
的语法。
这里实际上是 在where 中 描述了 函数泛型参数 具有哪些trait 。表现更规整。
1 | fn some_function<T: Display + Clone, U: Clone + Debug>(t: T, u: U) -> i32 {} |
返回值使用 trait
1 | fn returns_summarizable() -> impl Summary { |
使用 trait 求最大值
1 | // 这里还有另外一种写法是,返回值为 `slice` 中 `T` 的 引用 |
#1.4 函数定义
- fn function_name(variable: String)接收了String,并拥有它。如果它不返回任何东西,那么这个变量就会在函数里面死亡。
- fn function_name(variable: &String) 借用 String 并可以查看它
- fn function_name(variable: &mut String)借用String,可以更改。
#2 rust优秀开源项目
#2.1 项目列表
TiKV
PingCAP公司开源的TiDB的存储引擎。(我也不知道是啥~~~)
mesalink
百度安全部,为解决OpenSSL心脏滴血等漏洞,用rust写的SSL实现。(目前好像没人维护了,Maintainer 去了google)