Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


Rust 动态大小类型

Rust 大约 863 字

动态大小类型 dynamically sized types

有时被称为DSTunsized types

这些类型是运行时才知道占用的内存大小。

DST 常规用法

他们有一些额外的元信息来储存动态信息的大小。

DST 黄金规则

必须将动态大小类型的值置于某种指针之后。

DST str

没错,不是&str,而是str本身。str是一个DST;直到运行时我们都不知道字符串有多长。

因为直到运行时都不能知道其大小,也就意味着不能创建str类型的变量,也不能获取str类型的参数。

dyn

为了将trait用于trait对象,必须将他们放入指针之后,比如&dyn TraitBox<dyn Trait>Rc<dyn Trait>也可以)

Sized

Rust隐式的为每一个泛型函数增加了Sized bound

fn generic<T>(t: T) {
   // --snip--
}

实际上被当作如下处理:

fn generic<T: Sized>(t: T) {
    // --snip--
}

?Sized

泛型函数默认只能用于在编译时已知大小的类型。

然而可以使用如下特殊语法来放宽这个限制:

?Sized 上的 trait bound 意味着 “T 可能是也可能不是 Sized”

同时这个注解会覆盖泛型类型必须在编译时拥有固定大小的默认规则。

这种语法只能用于 Sized ,而不能用于任何其他 trait。

注意我们将 t 参数的类型从 T 变为了 &T:因为其类型可能不是 Sized 的,所以需要将其置于某种指针之后。

fn generic<T: ?Sized>(t: &T) {
    // --snip--
}

返回闭包

fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
    Box::new(|x| x + 1)
}
阅读 379 · 发布于 2023-04-24

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批