首页 > 解决方案 > 为什么 Rust 允许对值及其引用进行相同的方法调用?

问题描述

我仍在学习 Rust,我的问题建立在为什么 Rust 既有按值调用又有按引用调用?(但有点不同)。

具有 C/C++ 背景,我很困惑 Rust 如何允许对值及其引用进行相同的方法调用。我在The Rust Programming Language book 中注意到以下代码可以正常工作:

let s1 = String::from("hello");
let length = s1.len();
let len = calculate_length(&s1);

fn calculate_length(s: &String) -> usize {
    s.len()
}

这意味着方法调用len()适用于String值及其引用。我注意到同样的事情也发生了Vec<_>。在 C/C++ 中,需要取消对指针的引用才能调用其方法(使用类似 的运算符->);否则,会出现类型不匹配。在 Rust 中,编译器是否只是简单地“取消引用”引用以供您调用方法,还是因为对于像Stringand这样的类Vec,多个方法在后台实现了值(例如,String)和引用(例如,&String&str) ?

标签: rustreferencemethod-call

解决方案


推荐阅读