function - 在 Rust 中实际需要 move 到函数的情况

标签 function pointers reference rust move

我想确定在哪些一般(或特定)情况下人们不想使用引用将对象传递给 Rust 中的函数。

我最感兴趣的是功能(例如,创建一个函数是为了清理移入其中的资源),但是性能原因也很有趣(例如,如果复制一个小结构比通过指针访问它更快)。

当然,这涉及非 Copy 类型。

注意:很明显为什么要在赋值中使用 move 语义,例如为了防止别名,但在函数中这不会成为问题。

最佳答案

有一些类似的情况,它们都与结构的生命周期有关,即我正在编写 Octavo(加密库),其中我们有一些哈希函数(即 SHA1):

let mut digest = SHA1::new();
digest.update("Ala ma kota!");

let result = digest.result(); // here we invalidate digest as it finished its work

上述情况的其他用法是构建器模式:

PizzaBuilder::new()
    .add_sauce()
    .add_cheese()
    .add_topping(Topping::Tomato)
    .add_topping(Topping::Bacon)
    .add_topping(Topping::Jalapenio)
    .bake() // here we destroy PizzaBuilder as this setup isn't usable  anymore
            // you should create new PizzaBuilder for another pizza
            // (you cannot reuse dough once you bake pizza)

关于function - 在 Rust 中实际需要 move 到函数的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505429/

相关文章:

javascript - 动态创建按钮并为其分配功能

function - 函数中的日志文件变量会占用所有内存

c++ - 返回带有指针 C++ 的数组

Java String 变量设置 - 引用还是值?

bash - 为什么函数定义中花括号前需要空格?

function - Swift: ":"之前两个变量的原因

C 编程。仅使用数组和指针生成随机字母字符串的函数

令人困惑的答案 : One says *myptr++ increments pointer first, 其他人说 *p++ 取消引用旧指针值

perl - 如何从哈希元素的引用中获取 key

c - 声明相互使用的结构和函数引用