【发布时间】:2017-12-04 08:53:12
【问题描述】:
我有一个match 语句,它返回一个&str:
match k {
SP_KEY_1 => "KEY_1",
SP_KEY_2 => "KEY_2",
SP_KEY_3 => "KEY_3",
SP_KEY_4 => "KEY_4",
SP_KEY_5 => "KEY_5",
SP_KEY_6 => "KEY_6",
_ => (k as char), // I want to convert this to &str
}.as_bytes()
我尝试先将char 转换为字符串,然后再取其中的一部分:
&(k as char).to_string()[..]
但这给了我终身错误:
error[E0597]: borrowed value does not live long enough
声明(k as char).to_string() 是一个临时值,这是有道理的,因为我可以告诉to_string() 返回一个克隆。
我可以将.to_string() 添加到上面的每个&str 文字以使返回值String,但这看起来既丑陋(很多重复的代码),而且可能效率低下,因为to_string() 克隆了原始字符串切片。
具体问题是我如何将char 变成&str,但更广泛的问题是是否有更好的解决方案,这种情况通常会做什么。
【问题讨论】:
-
您需要向我们展示更多代码。
k的类型是什么?它来自哪里? -
这肯定是XY问题。除非您返回拥有该字符的东西,否则您不能使本地 char 值的寿命超过函数的范围。您应该考虑返回其他内容,例如枚举。
-
作为通用解决方案,您可以使用
Cow<'static, str>;然后Owned变体将存储String。 -
这行得通吗?
&format!("{}", k as char) -
@andy 不,这也会触发终身错误。