Rust如何确定for-in循环中的类型? Rust会在变量分配时自动引用/取消引用吗?

问题描述

从使用编译器开始,我可以看到Rust在这里将变量item作为类型&T

fn largest<T>(list: &[T]) -> &T 
    where T: PartialOrd {
    let mut largest = &(list[0]);

    for item in list {
        if item > largest {
            largest = item;
        }
    }

    largest
}


fn main() {
    let number_list = vec![34,50,25,100,65];

    let result = largest(&number_list);

    println!("The largest number is: {}",result);
}

为什么?当然,这就是我想要的,但是我没有指定。从容器的引用中提取时,Rust是否会自动将项目作为引用?

此外,如果我按如下方式更改第7行,为什么代码仍然可以编译:


    for item in list {
        if item > largest {
            largest = &item;
        }
    }

一旦我为largest声明的类型签名匹配,Rust是否会自动取消引用返回值?甚至没有输出警告?

如何将&x(其中x: &T)分配给另一个变量y(其中y: &T)。当然,我应该得到类型不匹配的信息:&&T&T不匹配?

我尝试阅读文档,但似乎回避了有关实际情况的问题。

我知道Rust会在方法调用上进行自动引用/取消引用,因为显式指定了接收者的类型(谁真的想在代码中读取类似(&receiver).method(args)的东西,这才有意义)。但是对变量赋值的自动引用/取消引用吗?当然这不可能发生吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)