Вот уже пару часов ломаю голову над этой проблемой. После прочтения главы о срезах в книге о ржавчине. Я пытался объединить строки внутри цикла.
fn append_words(times: u16){
let mut final_word = String::new();
let word: &str = "aahing ";
for _ in 0..times {
let tmp = format!("{}{}", &mut final_word[..], word);
final_word.push_str(&tmp[..]);
println!("{}", final_word);
}
}
Вывод
aahing
aahing aahing aahing
aahing aahing aahing aahing aahing aahing aahing
Это прекрасно работает.
Проблема возникает, когда вместо объединения &str
, объявленного внутри функции, я пытаюсь использовать элемент из вектора
fn select_words(words: Vec<&str>, times: u16){
let mut final_word = String::new();
println!("{}", words[5]);
for _ in 0..times {
let tmp = format!("{}{}", &mut final_word[..], words[5]);
final_word.push_str(&tmp[..]);
}
println!("{}", final_word);
}
Вывод
aahing
aahing
Вместо того, чтобы объединять и показывать что-то вроде первого вывода, строка перезаписывает его. Я думаю, что это так, потому что я начал с попытки объединить разные слова в Vec<&str>
, но он перезаписывал их на каждой итерации.
Я нашел эти похожие вопросы (первый действительно полезен), но опять же, когда Vec<&str>
не используется, он работает нормально. Как объединить строки? Добавление к строке внутри цикла for
Разве я не беру в расчет право собственности или что-то в этом роде?
Заранее спасибо, я пробираюсь через книгу ржавчины, так что я все еще ржавый нуб
Редактировать:
Я создаю вектор из файла, также так я вызываю функцию.
use structopt::StructOpt;
use structopt::clap;
#[derive(StructOpt)]
#[structopt(setting = clap::AppSettings::InferSubcommands)]
struct Cli {
#[structopt(short = "f", long = "file",
help="get words from specific file",
default_value="./words.txt",
parse(from_os_str))]
file: std::path::PathBuf,
}
fn main() {
let args = Cli::from_args();
let words = std::fs::read_to_string(&args.file)
.expect("could not read file");
let word_list = words.split('\n');
let words_vec: Vec<&str> = word_list.collect();
select_words(words_vec, 3);
}
Файл имеет такой формат
a
aa
aaa
aah
aahed
aahing
aahs
Я думаю, что часть «построение вектора» работает нормально.
select_words
, какое значениеtimes
вы передаете? Было бы полезно, если бы вы могли составить полный воспроизводимый пример. - person loganfsmyth   schedule 29.07.2021select_words
, похоже, работает как и ожидалось. - person kmdreko   schedule 29.07.2021["a\r", "aa\r"]
, с символом\r
, который испортил мой вывод, после его удаления все работает :). Извините за зря потраченное время - person bsantanad   schedule 29.07.2021