逃逸闭包
摘要:跑出父作用域的闭包叫做逃逸闭包 逃逸闭包如果引用了环境变量,那么需要使用move关键字,或者是FnOnce也行 fn test() -> impl Fn() { let s = String::from(""); move || { println!("{}", s); } } fn main()
阅读全文
posted @
2020-05-29 17:33
chen8840
阅读(387)
推荐(0)
闭包类型(Fn,FnMut,FnOnce)和move关键字
摘要:move关键字是强制让环境变量的所有权转移到闭包中而不管是不是发生了所有权的转移 move关键字和匿名函数是否是FnOnce没有必然联系,之和匿名函数体有关 当匿名函数体里转移了环境变量的所有权的时候,匿名函数就是FnOnce。 当匿名函数体里改变了环境变量的值的时候,匿名函数就是FnMut。 否则
阅读全文
posted @
2020-05-29 15:04
chen8840
阅读(700)
推荐(0)
FnOnce,FnMut和Fn
摘要:继承结构 FnOnce FnMut: FnOnce Fn: FnMut FnOnce就是说会转移闭包捕获变量的所有权,在闭包前加上move关键字可以限定此闭包为FnOnce move关键字是强制让环境变量的所有权转移到闭包中而不管是不是发生了所有权的转移 #![feature(core_intrin
阅读全文
posted @
2020-05-29 10:42
chen8840
阅读(755)
推荐(0)
使用生命周期来限制类型
摘要:生命周期一般用来修饰引用类型,但是他也可以用来修饰泛型和类型的 比如以下代码 trait Foo {} struct FooImpl<'a> { s: &'a u32 } impl<'a> Foo for FooImpl<'a> {} fn foo<'a>(s: &'a u32) -> Box<dy
阅读全文
posted @
2020-05-28 09:24
chen8840
阅读(116)
推荐(0)
rust实现http时如何读取一个完整的request
摘要:用stream.read_to_end是不行的,tcpstream不是文件没有明确的结束符 需要先读取http header节,再找Content-Length header,然后读取body。 这是http请求的结构 有个github可以参考,地址是https://github.com/lthei
阅读全文
posted @
2020-05-22 14:36
chen8840
阅读(1804)
推荐(0)
rust里的内存对齐
摘要:内存对齐主要遵循下面三个原则: 结构体变量的起始地址能够被其最宽的成员大小整除 结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节 结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字 上代码 struct A { a: u8, b: u32, c:
阅读全文
posted @
2020-05-19 10:26
chen8840
阅读(1561)
推荐(0)