如何正确地将这个文件行向量传递给Rust中的函数?
我试着把一个文件读入一个向量,然后从这个向量中随机打印出一行 我做错了什么 我在这里问这个问题是因为我知道我在概念上犯了一个很大的错误,但我很难确定它到底在哪里 我知道错误- 错误[E0308]:类型不匹配 26 |处理器和线路 |^^^^^应为如何正确地将这个文件行向量传递给Rust中的函数?,rust,Rust,我试着把一个文件读入一个向量,然后从这个向量中随机打印出一行 我做错了什么 我在这里问这个问题是因为我知道我在概念上犯了一个很大的错误,但我很难确定它到底在哪里 我知道错误- 错误[E0308]:类型不匹配 26 |处理器和线路 |^^^^^应为&str,找到结构std::string::string 我发现有一个不匹配的地方,但我不知道如何给出正确的类型,或者如何重构(非常短的)函数的代码 我的代码如下: use std::{ fs::File, io::{prelude::*
&str
,找到结构std::string::string
我发现有一个不匹配的地方,但我不知道如何给出正确的类型,或者如何重构(非常短的)函数的代码
我的代码如下:
use std::{
fs::File,
io::{prelude::*, BufReader},
path::Path,
};
fn lines_from_file(filename: impl AsRef<Path>) -> Vec<String> {
let file = File::open(filename).expect("no such file");
let buf = BufReader::new(file);
buf.lines()
.map(|l| l.expect("Could not parse line"))
.collect()
}
fn processor(vectr: &Vec<&str>) -> () {
let vec = vectr;
let index = (rand::random::<f32>() * vec.len() as f32).floor() as usize;
println!("{}", vectr[index]);
}
fn main() {
let lines = lines_from_file("./example.txt");
for line in lines {
println!("{:?}", line);
}
processor(&lines);
}
使用std::{
fs::文件,
io::{前奏曲::*,布弗瑞德},
路径::路径,
};
fn行\u来自\u文件(文件名:impl AsRef)->Vec{
让file=file::open(filename).expect(“没有这样的文件”);
让buf=BufReader::new(文件);
buf.行()
.map(| l | l.expect(“无法分析行”))
.collect()
}
fn处理器(vectr:&Vec)->(){
设vec=vectr;
让index=(rand::random::()*vec.len()作为f32.floor()作为usize;
println!(“{}”,vectr[index]);
}
fn main(){
让lines=来自_文件(“./example.txt”)的行;
排队{
println!(“{:?}”,行);
}
处理器(&line);
}
当您调用处理器
函数时,您试图传递一个向量
,该向量是文件中的行返回的,但处理器
需要一个向量
。您可以更改处理器以符合该期望:
fn processor(vectr: &Vec<String>) -> () {
let vec = vectr;
let index = (rand::random::<f32>() * vec.len() as f32).floor() as usize;
println!("{}", vectr[index]);
}
更一般地说,String
与String slice&str
不同,因此Vec
与Vec
不同。我建议你检查一下防锈书:谢谢!这就解释了。
fn main() {
let lines = lines_from_file("./example.txt");
for line in &lines {. // &lines to avoid moving the variable
println!("{:?}", line);
}
processor(&lines);
}