Thanks! :D It compiles now! (and works)
The working code is here: https://github.com/astrieanna/rust-fun/blob/one_worker_per_element/pmap.rs Best, Leah On Sat, Nov 2, 2013 at 5:21 PM, Simon Sapin <simon.sa...@exyr.org> wrote: > Le 02/11/2013 21:05, Leah Hanson a écrit : > > Thanks, Brendan. :) >> >> You’re trying to move the ~strs out of the vector. You’ll need to >> use `move_iter`: >> >> Is this "moving" about moving memory around or about promising the >> compiler that I won't use those elements of the vector again? >> > > ~str is an "owned" string that can only have one owner. If you move it > (give away ownership) you can not use it anymore. The compiler verifies > that. > > This is why move_iter() consumes a vector (takes ownership), while iter() > only gives you references (& pointers) to the elements. > > This allows the memory to be freed when the owner disappears, without > garbage collection or reference counting. > > > ~~~ >> let ports = do myvect.move_iter().map |s| { >> let (pport, cchan) = stream(); >> do spawn { >> cchan.send(fun(s)) >> } >> pport >> }.to_owned_vec(); >> >> >> There is still a problem because something (I guess the `do spawn >> {...}`) is a "heap closure". >> >> * error: cannot move out of captured outer variable in a heap closure >> o cchan.send(fun(s)) >> >> >> I think that this error message is complaining because I'm trying to >> move s, the ~str that the `do spawn {...}` closes over, to a new task. >> And I'm not allowed to move it because it is apparently a heap closure. >> Is there some other kind of closure that does work here? Or some way to >> make this not a closure? >> > > I’m not sure, but you may need to use spawn_with to move something into a > task: > > do spawn_with(s) |s| { ... } > > -- > Simon Sapin > > _______________________________________________ > Rust-dev mailing list > Rust-dev@mozilla.org > https://mail.mozilla.org/listinfo/rust-dev >
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev