Как менять строку без повторного выделения памяти?

Можно же как-то менять строчку без повторного выделения памяти?
А то не очень-то красиво у меня выходит, что на каждой итерации новая строка выделяться будет:

for i in 0..N { f(&format!("directional_lights[{}].direction",i)); }

Наверно будет логично скопировать сюда, чтоб вопрос не висел

use std::fmt::Write;

fn main () {
    let mut buf = String::new();
    write!(buf, "test [{}]", 123).unwrap();
    println!("{}", buf); // test [123]
}
1 лайк

Спасибо :slight_smile:

Добавлю, что для сброса старого значения .clear() есть:

use std::fmt::Write;

fn f (s: &str) {
    println!("{}", s);
}

fn main() {
    let mut s = String::new();
    for i in 0..10 {
        s.clear();
        write!(&mut s, "test[{}]", i).unwrap();
        f(&s);
    }
}

https://play.rust-lang.org/?gist=870977cac22243a3308d397b713b203d

1 лайк