string - 函数不想使用函数参数返回字符串切片

我尝试制作一个返回字符串切片的函数。该函数接受三个参数:

  1. a 切片的开始
  2. b 切片结束
  3. 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#) 中制作打开文件对话框?

bash - 引用命令替换的正确方法

css - 注入(inject)具有特定范围的 Chakra UI 全局样式

javascript - 如何使用 Axios 拦截器向响应添加一些 header ?

python - 根据python中另一个字符串元素的数量删除字符串元素

c++ - 使用 accumulate 计算替代总和

python - 从需要登录的社交媒体网站抓取最新帖子时,如何保持不被发现?