rust - 为什么 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 中,编译器是否只是简单地“取消引用”引用以供您调用方法,还是因为对于像String
and这样的类Vec
,多个方法在后台实现了值(例如,String
)和引用(例如,&String
和&str
) ?
解决方案
推荐阅读
- javascript - 即使刷新内容,如何保留内容?
- node.js - 使用共享库的舒适方式
- php - Laravel 8:多重身份验证保护它仍然将我重定向到登录页面?
- reactjs - 如何更改 MaterialTopTabNavigator 中的活动 labelStyle?
- export - 使用 ExtendScript for Adobe Illustrator 以特定文件大小导出 PNG
- stenciljs - 模板组件的维度为零
- ruby-on-rails - YAML.load_file 无法正确读取 ENV 变量
- javascript - 在类的构造函数之外写一个字段是什么意思?
- python - 如何使用 Python Selenium 点击第一个 Yahoo 搜索结果
- javascript - 如何创建一个在 2 个事件之间跳过排放的 observable