LINUX.ORG.RU

Сообщения bv1

 

Как решить ошибку с заимствованием?

мне нужно в условии присваивать возвращаемое значение ошибка вроде понятна это в одновременном изменяемом и не изменяемом взаимствование но я не знаю как решить эту проблему

use std::fs::File;
use std::io::Read;
use std::path::Path;
use std::ffi::OsString;
use std::collections::HashMap;
extern crate tokenize;
use tokenize::tokenize::words;
extern crate rfts;
use rfts::rfts::{indexing, ftsearch, update};

fn main() {
    let mut upd: HashMap<&str, Vec<(u32, u32)>> = HashMap::new();
    let paths = std::fs::read_dir("./my_folder").unwrap();
    let mut vf = vec![];
    let mut tok:String = Default::default();
    let folder = "./my_folder/".to_string();
    for path in paths {
        vf.push(path.expect("REASON").file_name());
    }
    for i in 0..vf.len() {
        let mut contents = String::new();
        let file = File::open(folder.clone() + &vf[i].clone().into_string().unwrap());
        file.expect("REASON").read_to_string(&mut contents).unwrap();
        {
            let t = &mut tok;
            *t = words(contents);
        }
        let v = tok.split(" ").collect::<Vec<_>>();
        let ind = indexing(v, i.try_into().unwrap());
        if i == 0 {
            upd = ind.clone();
        } else {
            upd = update(ind, upd);
        }
    }
    println!("{:?}", upd);
}

ошибка

error[E0502]: cannot borrow tok as mutable because it is also borrowed as immutable –> src/main.rs:25:21 | 25 | let t = &mut tok; | ^^^^^^^^ mutable borrow occurs here … 28 | let v = tok.split(" ").collect::>(); | ————– immutable borrow occurs here … 33 | upd = update(ind, upd); | — immutable borrow later used here

 

bv1
()

RSS подписка на новые темы