Hi,

When I try to compile this program, I get a "Use of moved variable" error.

  fn fun(b: ~[u8]) {
    // ...
  }

  fn main() {
    let bytes: ~[u8] = ~[1,2,3];

    loop { fun(bytes); }
  }

t.rs:8:13: 8:18 error: use of moved variable: `bytes`
t.rs:8   loop { fun(bytes); }
                    ^~~~~
I can avoid the problem, by rewriting the program towards this:

  fn fun(b: ~[u8]) -> ~[u8] { b }

  fn main() {
    let mut bytes: ~[u8] = ~[1,2,3];

    loop {
      bytes = fun(bytes);
    }
  }

I find this somehow very unintuitive, but of course I understand that the variable "has to move back". Of course I can rewrite function "fun" to use &[u8] as parameter, but I want to call TcpSocket.write, which only accepts a ~ [u8] and I don't know how to convert a &[u8] into a ~[u8]. As & can point to managed boxes I don't think it's possible
to convert safely.

So is there another "nice" solution to the problem? Maybe I am missing something...

Best,

  Michael
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to