Вау! Это довольно круто! Спасибо Тренткл и Шепмастер
лкнулся с этой проблемой, где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()
в конце каждого литерала в шаблоне, так как он не так чист.
Есть ли способ решить проблему, или мне просто нужно обойти это?