我尝试制作一个返回字符串切片的函数。该函数接受三个参数:
a
切片的开始b
切片结束txt
对字符串文字的引用fn main() {
let text = String::from("My name is Ivan");
fn get_slice(a: u8, b: u8, txt: &String) -> &str {
&txt[a..b]
}
println!("{}", get_slice(4, 8, &text));
}
编译器告诉我:
error[E0277]: the type `String` cannot be indexed by `std::ops::Range<u8>`
--> src/main.rs:5:10
|
5 | &txt[a..b]
| ^^^^^^^^^ `String` cannot be indexed by `std::ops::Range<u8>`
|
= help: the trait `Index<std::ops::Range<u8>>` is not implemented for `String`
如果我将范围 [a..b]
替换为 [2..7]
或任何其他数字范围,它就可以工作。
最佳答案
需要考虑两件事,切片使用 usize
而不是 u8
。此外,您可能希望使用 &str
而不是 &String
:
fn get_slice(a: usize, b: usize, txt: &str) -> &str {
&txt[a..b]
}
Playground
https://stackoverflow.com/questions/68709251/
相关文章:
apache-spark - 如何在 Spark SQL 中访问 python 变量?
reactjs - 如何在 onSubmit 事件中使用 react-query useQuery?
java - 使用同步(锁定对象) block 时,静态锁定对象是否需要是最终的?
c# - 如何在控制台应用程序 .NET Core (C#) 中制作打开文件对话框?
css - 注入(inject)具有特定范围的 Chakra UI 全局样式
javascript - 如何使用 Axios 拦截器向响应添加一些 header ?