Vladimir Matveev
Vladimir Matveev

Reputation: 127711

Concatenate string literal with another string

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.

Upvotes: 4

Views: 5772

Answers (3)

Vladimir Matveev
Vladimir Matveev

Reputation: 127711

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);
}

Upvotes: 6

Christopher Davies
Christopher Davies

Reputation: 4551

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";

Upvotes: 7

Luqman
Luqman

Reputation: 1576

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" + "!";

Upvotes: 2

Related Questions