问题描述
从使用编译器开始,我可以看到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 (将#修改为@)