4

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.

Vladimir Matveev
  • 120,085
  • 34
  • 287
  • 296

3 Answers3

7

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";
tshepang
  • 12,111
  • 21
  • 91
  • 136
Christopher Davies
  • 4,461
  • 2
  • 34
  • 33
6

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);
}
tshepang
  • 12,111
  • 21
  • 91
  • 136
Vladimir Matveev
  • 120,085
  • 34
  • 287
  • 296
2

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" + "!";
Luqman
  • 1,348
  • 1
  • 9
  • 6