Fork me on GitHub

随笔分类 -  Rust

rust tricks
摘要:如果T实现了某个trait,那么整个T类型的&T,也实现了该trait了吗?不是这样的。 为什么这样,例子说明下: trait Speaker { fn speak(&self); } struct BasicSpeaker; impl Speaker for BasicSpeaker { fn s 阅读全文
posted @ 2023-03-29 11:08 BabyMelvin 阅读(488) 评论(0) 推荐(0)
摘要:点号操作会有一些神奇的类型转换发生。将auto-referencing,auto-dereferencing和强转直到类型匹配。 有个函数foo有一个参数(self, &self或者&mut self)。如果调用value.foo,在调用合适的函数实现之前,编译器需要决定什么类型的Self.为了更好 阅读全文
posted @ 2023-02-03 21:53 BabyMelvin 阅读(69) 评论(0) 推荐(0)
摘要:1.One-Liners 1.strings // 1. 拼接字符串 format!("{x}{y}") // 2.显示Display write!(x, "{y}") // 3. 分隔符分开string,s.split(pattern) s.split("abc"); s.split('/'); 阅读全文
posted @ 2022-09-03 22:41 BabyMelvin 阅读(370) 评论(0) 推荐(0)
摘要:Rust语法速查小册 #1. 数据结构 通过关键字定义的数据类型和内存位置 struct S{}定义一个命名成员的结构体 struct S {x:T} 定义一个结构体,成员名为x,成员类型为T struct S(T) 定义元组类型结构体,成员.0类型为T struct S 定义零长单元结构体,不占空 阅读全文
posted @ 2022-09-03 18:22 BabyMelvin 阅读(354) 评论(0) 推荐(0)
摘要:可以将所有权、借用规则与这些智能指针做一个对比 | Rust 规则 | 智能指针带来的额外规则 | | | | | 一个数据只有一个所有者 | Rc/Arc让一个数据可以拥有多个所有者 | | 要么多个不可变借用,要么一个可变借用 | RefCell实现编译期可变、不可变引用共存 | | 违背规则导 阅读全文
posted @ 2022-08-21 20:49 BabyMelvin 阅读(54) 评论(0) 推荐(0)
摘要:1.Copy和Drop 我们无法为一个类型同时实现 Copy 和 Drop 特征。因为实现了 Copy 的特征会被编译器隐式的复制,因此非常难以预测析构函数执行的时间和频率。因此这些实现了 Copy 的类型无法拥有析构函数。 #[derive(Copy)] struct Foo; impl Drop 阅读全文
posted @ 2022-08-21 20:37 BabyMelvin 阅读(54) 评论(0) 推荐(0)
摘要:1.介绍 方法调用的点操作符看起来简单,实际上非常不简单,它在调用时,会发生很多魔法般的类型转换,例如:自动引用、自动解引用,强制类型转换直到类型能匹配等。 假设有一个方法 foo,它有一个接收器(接收器就是 self、&self、&mut self 参数)。如果调用 value.foo(),编译器 阅读全文
posted @ 2022-08-18 22:35 BabyMelvin 阅读(288) 评论(1) 推荐(0)