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"