根据我的理解,Next需要&mut Test分,但create_test()返回Test分.

为什么可以汇编这些内容呢?

我的猜测是,.会隐含地将Test转换为&mut Test,我不确定.有谁能解释一下这件事吗?

pub struct Test {
    t: u64,
}

fn create_test() -> Test {
    Test {
        t: 1
    }
} 

impl Test {
    pub fn next(&mut self) {
        self.t = 10;
    }
}

fn main() {
    let mut t = Test { t: 20 };
    t.next();

    create_test().next();  // here
}

推荐答案

这一点在本书的Method-call expressions节中有解释.

在查找方法调用时,为了调用方法,接收方可能会自动取消引用或borrow .

这正是这里正在发生的事情.RUST编译器自动borrow 返回create_test的值.

Rust相关问答推荐

为什么函数不接受选项T参数的所有权?

为什么是!为Rust中的RwLockReadGuard和RwLockWriteGuard实现的发送特征?

基于对vec值的引用从该值中删除该值

关联类型(类型参数)命名约定

无法在线程之间安全地发送future (&Q;)&错误

integer cast as pointer是什么意思

S在Cargo.toml中添加工作空间开发依赖关系的正确方法是什么?

如何正确重新排列代码以绕过铁 rust 借入判断器?

作为1字节位掩码的布尔值 struct

我如何使用AWS SDK for Rust获取我承担的角色的凭据?

正在将带有盒的异步特征迁移到新的异步_fn_in_特征功能

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

UnsafeCell:它如何通知 rustc Select 退出基于别名的优化?

`use` 和 `crate` 关键字在 Rust 项目中效果不佳

为什么这段 Rust 代码会在没有递归或循环的情况下导致堆栈溢出?

不能将 `*self` borrow 为不可变的,因为它也被borrow 为可变的 - 编译器真的需要如此严格吗?

特征中定义的类型与一般定义的类型之间的区别

为什么 File::read_to_end 缓冲区容量越大越慢?

当我不满足特征界限时会发生什么?

为什么 Rust 中的关联类型需要明确的生命周期注释?