【发布时间】:2021-04-26 01:00:24
【问题描述】:
我在打开 Options 并将值转换为字符串切片时遇到问题。
- 当 Option 具有
Some值时,我想将其转换为&str。 - 当Option为
None时,我只返回一个空字符串切片""。
例如:
let val: Option<u8> = row.get(k);
match val {
None => "",
Some(v) => v.to_string().as_str()
}
但这会失败并出现这样的错误。
temporary value dropped while borrowed
consider using a `let` binding to create a longer lived value rustc E0716
main.rs(.....): temporary value is freed at the end of this statement
我尝试过以各种不同的方式分解它,例如这样
let val: Option<u8> = row.get(k);
match val {
None => "",
Some(v) => {
let vstr = v.to_string();
vstr.as_str()
}
}
但我仍然很困惑。我已经查看了许多类似的问题,但没有一个是完全相同的,我仍然被卡住了。我该怎么做?
澄清,我想要 tinyint 的十进制表示,而不是字符点。这不是 utf8 字符串,只是一个数字。
let x: u8 = 10;
let s: String = x.to_string();
println!("10 = {}", s);
这应该打印10 = 10
【问题讨论】:
-
u8 是单字节,不应该是 [u8] 吗?
-
或者,它真的是
Option<u8>,也许您想将那个 8 位整数转换成它在字符串中的十进制表示? -
@antoninGRAVIL,并不是真的要成为一个字节字符。把它想象成一个小整数,有害的,是的,更像是我想要的字符串中的十进制表示。
-
这是因为您从
vstr借用,当它超出范围时会被丢弃。由于您要返回一个引用,因此该引用必须指向比引用更有效的东西。尝试返回String而不是&str。 -
@Mel 是的!通过使用 String 我现在可以解决它。
标签: rust