Rust 为什么我会得到;在当前作用域中找不到类型“[usize]”名为“join”的方法;?

Rust 为什么我会得到;在当前作用域中找不到类型“[usize]”名为“join”的方法;?,rust,Rust,我尝试将usize映射到String,收集到Vec和一些更随机的东西。我不明白发生了什么事。TLDR: 由于map()将一个迭代器转换为另一个迭代器,因此应首先提供迭代器。 尝试: 标准库的join仅为切片定义,因此以下代码有效: map(|u| u.to_string()) 编辑: 根据您的评论: 使用take(n)或下标操作符(重新切片书籍[0..n_书籍])有什么区别 片是由长度和指向内存的指针组成的类型。 您可以使用.take(n_books)而不是重新切片,这是一个迭代器,只迭代i

我尝试将
usize
映射到
String
,收集到
Vec
和一些更随机的东西。我不明白发生了什么事。

TLDR:
由于
map()
将一个迭代器转换为另一个迭代器,因此应首先提供迭代器。
尝试:

标准库的
join
仅为切片定义,因此以下代码有效:

map(|u| u.to_string())

编辑:
根据您的评论:

使用
take(n)
或下标操作符(重新切片
书籍[0..n_书籍]
)有什么区别

片是由长度和指向内存的指针组成的类型。
您可以使用
.take(n_books)
而不是重新切片,这是一个迭代器,只迭代
iter
的第一次
n
迭代,请尝试:

let books:Vec=Vec![1, 2, 3];
让n_书籍:usize=2;
让结果=书籍
.国际热核实验堆(iter)
.拿(n_书)
.map(| u | u.to_string())
收集::()
.加入(“”);
普林顿!(“{}”,结果)//"1 2"

当我只添加
map
:“error[E0599]:在当前范围内找不到类型
[usize]
的名为
map
的方法”您的答案有效,但我不知道使用
take
或下标运算符有什么不同
error[E0599]: no method named `join` found for type `[usize]` in the current scope
 --> src/lib.rs:2:36
  |
2 |     let fbooks = books[0..n_books].join(" ");
  |                                    ^^^^ method not found in `[usize]`
fn example(books: Vec<usize>, n_books: usize) -> String {
    books[0..n_books]
        .iter()
        .map(|u| u.to_string())
        .collect::<Vec<_>>()
        .join(" ")
}
fn main() {
    let books: Vec<usize> = vec![1, 2, 3];
    let n_books: usize = 2;
    let result = example(books, n_books);
    println!("{}", result); //"1 2"
}
map(|u| u.to_string())
let books: &[_] = &["1", "2", "3"];
let n_books: usize = 2;
let result = books[0..n_books].join(" ");
println!("{}", result); // "1 2"
    let books: Vec<usize> = vec![1, 2, 3];
    let n_books: usize = 2;
    let result = books
        .iter()
        .take(n_books)
        .map(|u| u.to_string())
        .collect::<Vec<_>>()
        .join(" ");

    println!("{}", result); //"1 2"