rust - 字符串切片与切片&字符串
问题描述
我正在阅读 rust lang 网站上的文档,在第 4 章中,他们做了以下示例:
let s = String::from("hello world");
let hello = &s[0..5];
let world = &s[6..11];
hello
是&str
我从 type 的变量创建s
的类型String
。
下面的一些行定义了以下函数:
fn first_word(s: &String) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
这次s
是类型&String
,但仍然&s[0..i]
给了我&str
一片。这怎么可能?我认为实现这一目标的正确方法是&((*str)[0..i])
.
我错过了什么吗?也许在[0..i]
操作期间 Rust自动尊重变量?
谢谢
解决方案
也许在
[0..i]
操作期间 Rust自动尊重变量?
这正是发生的事情。当您调用方法/索引引用时,它会在应用该方法之前自动取消引用。此行为也可以使用Deref
trait 手动实现。以 为目标实现String
,这意味着当您在 上调用方法时。在此处阅读有关 deref 强制的更多信息。Deref
str
str
String
推荐阅读
- json - 杰克逊 - 使用 JsonNode 类型时对象未保存为基本 JSON
- node.js - 是否有用于 sequelize 的拦截器模式,用于对 db 的敏感数据进行标记化和去标记化
- java - Codenameone "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: javafx/scene/media/MediaException 已由更新的版本编译
- php - 如何在 PHP 中使用 Itext?
- mysql - mysql select按if else条件计数
- c++ - 我的项目的属性配置正确,但Visual Studio仍然无法打开包含头文件
- c - 如何在C中将a字符串拆分为单独的单词,其中空格不是恒定的?
- powerbi - 根据月份和年份列计算工作日数 - DAX
- python - 在 python 中模拟 Elasticsearch API
- php - Wordpress:允许上传媒体中的 zip 文件