此问题在此处已有答案:
A more convenient concatenation with a string literal in Rust(3个答案)
How to concatenate static strings in Rust(3个答案)
昨天关门了。
在rust
中可能有类似的东西吗?
fn replace_abracadabra(s: &str) -> &str {
if s.starts_with("abracadabra") {
"i am static" + s.chars().last().unwrap()
} else {
s
}
}
在这里,"i am static" + s.chars().last().unwrap()
全部被借用,但现在是一个非连续的内存块。
1条答案
按热度按时间xxls0lw81#
不,切片(字符串切片和数组切片)根据定义是连续的。
你也不能借用,除非你有一个拥有的值可以借用 。 在这种情况下,你试图构造一个新的值,然后返回一个对它的引用,这在Rust中是不可能的。
你试图连接的两条信息确实是借用的,但是连接创建了一个包含非借用信息的 * 新值 *。即使你让字符串数据在它所在的地方,“将这两个字符串粘合在一起”的信息也不能被借用。例如,你可以返回一个
(&str, &str)
--元组是一个拥有的值,其中包含两个借用的切片。这个函数应该返回一个owned的
String
值。你也可以返回一个Cow<'_, str>
,这样你就可以在else
块中借用s
而不复制,但是在第一种情况下返回一个owned的值。