Rust:一个不再有 C/C+的,实现安全实时软件的未来( 九 )

Box 类型则表示我们已经在堆上分配了内存,在这里使用是因为 unique_ptr 同样可以分配到堆。因为 Rust 中每个对象一次有且仅有一个所有者的规则,我们并不需要任何 unique_ptr 类似的东西。接着创建一个闭包,用更高阶的函数 map 转换字符串,类似 C++ 的方式,但并不显得冗长。但当编译的时候还是会报错,下面是错误信息:

Rust 社区有一点很棒,它提供给人们的学习资源非常多,也会提供可读性的错误信息,用户甚至可以向编译器询问关于错误的更详细信息,而编译器则会回复一个带有解释的最小示例。

当创建闭包时,由于有且仅有一个所有者的规则,数据是在其内被移动的。接下来编译器推断闭包只能运行一次:没有所有权的原因,多次的运行是非法的。之后 map 函数就会需求一个可以重复调用并且处于可变状态的可调用函数,这就是为什么编译器会失败的原因。

这一段代码显示了 Rust 中类型系统与 C++ 相比有多么强大,同时也体现了在当编译器跟踪对象生命周期时的语言中编程是多么不同。

在示例中的错误信息里提到了特质(trait)。例如:”缺少实现 FnMut 特质的闭包“。特质是一种告诉 Rust 编译器某个特定类型拥有功能的语言特性,特质也是 Rust 多态机制的体现。

推荐阅读