LINUX.ORG.RU

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

 


0

2

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

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 (всего исправлений: 5)
Ответ на: комментарий от bv1

Правила форума

5.5 Преднамеренное искажение слов, замена букв на похожие по написанию символы и буквы других языков. Преднамеренное нарушение правил русского языка. Преднамеренность определяется модераторами отдельно в каждом случае, исходя из количества искажённых слов (а также знаков препинания и пробелов) и регулярности искажений в других темах и комментариях того же автора.

ox55ff ★★★★★
()
Ответ на: комментарий от bv1

Но ведь конструктивная критика была как раз от него — реально же приходится 2-3 раза перечитывать, чтоб понять, кто на чём стоял. И агрессивно отреагировал ты:

ты решаешь кому чем заниматься?

Вместо того, чтобы привести в какой-то удобочитаемый вид, или сделать отписку типа «я с телефона, мне неудобно», или просто проигнорировать.

CrX ★★★★★
()
Ответ на: комментарий от bv1

Пренебрежение правилами языка и словесная каша вместо ясного выражения мыслей не делают тебя загадочным оригиналом, они показывают тебя балбесом, который не уважает своих потенциальных собеседников.

alex1101
()
Ответ на: комментарий от bv1

Если русский не родной, то так и напиши. Мы поймём. Но если ты просто пренебрежительно относишься к правилам языка, то это неуважение к собеседникам.

ox55ff ★★★★★
()

У тебя в этой строке происходит borrow от tok который потом утекает за итерацию цикла

let v = tok.split(" ").collect::<Vec<_>>();

Перед тем как делать collect сконверти строки из &str в String

let v = tok.split(" ").map(String::from).collect::<Vec<String>>();
pftBest ★★★★
()
Ответ на: комментарий от bv1

Многолетняя практика показывает, что если человек не умеет связно выражать свои мысли на русском языке, то у него и в коде будет каша.

Это если русский твой родной язык. Если нет - то и спрос другой будет, но вопрос действительно сформулирован не очень.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

я не этнический русский, если это правильно как выражение «не русский». это нужно прекратить делать скидку из-за какая у тебя национальность(извините если это звучит грубо). на англо язычных форумах ни кто не цепляется к ошибкам. если я бы знал что здесь так важно начинать предложение с заглавной, ставить знаки препинания.

bv1
() автор топика
Ответ на: комментарий от bv1

Дело не в знаках препинания, и не в большой букве, дело в том, что то как составлен вопрос вызывает сложности в его понимании. Это простительно, если русский не родной для человека, потому и уточнили.

Но, к сожалению, довольно много тех для кого русский язык родной, не умеют внятно на нём задавать вопросы, такие придирки относятся к ним.

А с английским письменным сильно проще, как по мне, плюс за счёт большего распространения среди не-нативов(да и у нативов он довольно жуткий местами) там граммар-нацизма несколько меньше в интернете.

UPD: К слову, вспомнил историю как нам как-то раз болгарин в поддержку написал письмо на русском. Мы час втроём сидели думали что нас спрашивают, вроде все слова русские, а ничего не понятно. Пришлось просить «а переформулируйте вопрос на английском, пожалуйста, мы не поняли что от нас требуется».

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Пропустил комментарий. Теперь понятно.

Человеку намекнули, что есть культура речи и правила. Он стал обижаться и ссылаться на забугорные форумы. Так и до диверсити не далеко.

utanho ★★★★★
()
Ответ на: комментарий от bv1

это нужно прекратить делать скидку из-за какая у тебя национальность(извините если это звучит грубо).

Никто не делает скидку. Если я правильно помню, новое предложение начинается с заглавной буквы в большинстве языков. Иероглифическое письмо и экзотику вроде хинди и тенгвар, рассматривать не будем.

utanho ★★★★★
()
Ответ на: комментарий от bv1

на англо язычных форумах ни кто не цепляется к ошибкам.

Ну, тут не англоязычный форум.

Английский в этом плане особый — всё же язык международного общения нынче, поэтому все просто привыкли. Ну а вообще именно к ошибкам там действительно не цепляются, но если всё именно наплевательски структурировано, так что это сложно понять, то на это, как правило, на англоязычных тоже укажут или вежливо попросят переформулировать мысль, разделив её на какие-то последовательные фрагменты. Есть большая разница между тем, чтобы перепутать какие-нибудь времена или падежи, или грамматический род, или орфографические ошибки делать, совсем другое — писать всё стеной текста без запятых без точекбеззаглавныхбуквбезпробеловитакжевсёпонятноеслитриразаперечитать. Знаки препинания сильно улучшают понятность написанного, особенно если там ещё и ошибки. Заглавные буквы тоже помогают. Их же не просто так придумали.

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

Тут важно понять, что это делается не для того, чтобы обидеть и ткнуть пальцем «фу, безграмотный», а потому что удобоваримость вопроса сильно повышает шансы получить ответ. Ведь нельзя ответить на вопрос, если не понял сам вопрос. Разве что случайно.

если я бы знал что здесь так важно начинать предложение с заглавной, ставить знаки препинания.

Знаки препинания ставить важно всегда — их полное отсутствие сильно ухудшает понимание. Если с запятыми может быть сложно, то уж точки, как мне кажется, в любом языке более-менее одинаково ставятся. Ну или можно просто логически делить свою мысль на какие-то законченные части и, если с точками совсем уж туго, хотя бы новой строкой что ли разделять. Предложения с большой буквы — не столь важно, но ведь это же просто.

CrX ★★★★★
()
Ответ на: комментарий от CrX

к ошибкам там действительно не цепляются

Ну как, [SPACE ,COMMA], например, даже удостоилась отдельной статьи. Про неё даже песни сочиняют.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от thunar

Вообще само по себе наличие статьи и песни не означает, что к этому цепляются при общении в интернете.

Но, вот к этому как раз могут и прицепиться. Что как раз и подтверждает мой тезис. Цепляются не к орфографии или неправильным склонениям, а когда читать тяжко. Нет ни одного языка, где пробел бы ставился перед запятой, а не после, это не списывается на незнание языка.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)