Вау! Это довольно круто! Спасибо Тренткл и Шепмастер

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

let x = 42;
let category = match x {
    0...9 => "Between 0 and 9",
    number @ 10 => format!("It's a {}!", number).as_str(),
    _ if x < 0 => "Negative",
    _ => "Something else",
};

println!("{}", category);

В этом коде типcategory это&str, который удовлетворяется возвращением литерала как"Between 0 and 9", Если я хочу отформатировать совпадающее значение для среза, используяas_str()тогда я получаю ошибку:

error[E0716]: temporary value dropped while borrowed
 --> src/main.rs:5:24
  |
3 |     let category = match x {
  |         -------- borrow later stored here
4 |         0...9 => "Between 0 and 9",
5 |         number @ 10 => format!("It's a {}!", number).as_str(),
  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        - temporary value is freed at the end of this statement
  |                        |
  |                        creates a temporary which is freed while still in use
  |
  = note: consider using a `let` binding to create a longer lived value
  = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

Я немного почитал и нашел людей с похожими проблемами, но, похоже, я не мог найти никакого решения.

Простой обходной путь будет иметьcategory бытьString вместо&str, но мне не нравится идея того, чтобы поставить.to_string() в конце каждого литерала в шаблоне, так как он не так чист.

Есть ли способ решить проблему, или мне просто нужно обойти это?

Ответы на вопрос(1)

Ваш ответ на вопрос