Concatenate string literal with another string

2019-06-24 10:20发布

Is there some reason why I cannot concatenate a string literal with a string variable? The following code:

fn main() {
    let x = ~"abcd";
    io::println("Message: " + x);
}

gives this error:

test2.rs:3:16: 3:31 error: binary operation + cannot be applied to type `&'static str`
test2.rs:3     io::println("Message: " + x);
                           ^~~~~~~~~~~~~~~
error: aborting due to previous error

I guess this is a pretty basic and very common pattern, and usage of fmt! in such cases only brings unnecessary clutter.

3条回答
祖国的老花朵
2楼-- · 2019-06-24 10:35

By default string literals have static lifetime, and it is not possible to concatenate unique and static vectors. Using unique literal string helped:

fn main() {
    let x = ~"abcd";
    io::println(~"Message: " + x);
}
查看更多
劫难
3楼-- · 2019-06-24 10:40

Just to addon to the above answer, as long as the right most string is of the type ~str then you can add any kind of string to it.

let x = ~"Hello" + @" " + &"World" + "!";
查看更多
干净又极端
4楼-- · 2019-06-24 10:42

With the latest version of Rust (0.11), the tilde (~) operator is deprecated.

Here's an example of how to fix it with version 0.11:

let mut foo = "bar".to_string();
foo = foo + "foo";
查看更多
登录 后发表回答