rust `&str`指向内存的非连续部分[重复]

up9lanfz  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

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()全部被借用,但现在是一个非连续的内存块。

xxls0lw8

xxls0lw81#

不,切片(字符串切片和数组切片)根据定义是连续的。
你也不能借用,除非你有一个拥有的值可以借用 在这种情况下,你试图构造一个新的值,然后返回一个对它的引用,这在Rust中是不可能的。
你试图连接的两条信息确实是借用的,但是连接创建了一个包含非借用信息的 * 新值 *。即使你让字符串数据在它所在的地方,“将这两个字符串粘合在一起”的信息也不能被借用。例如,你可以返回一个(&str, &str)--元组是一个拥有的值,其中包含两个借用的切片。
这个函数应该返回一个owned的String值。你也可以返回一个Cow<'_, str>,这样你就可以在else块中借用s而不复制,但是在第一种情况下返回一个owned的值。

相关问题