Я пытаюсь выяснить, как решить эту проблему, где я использую structopt для доступа к параметрам командной строки и затем передаю их для дальнейшей обработки:
fn main() {
let opt = Opt::from_args();
for _ in 0..opt.threads {
GLOBAL_THREAD_COUNT.fetch_add(1, Ordering::SeqCst);
thread::spawn(move || {
// We need to catch panics to reliably signal exit of a thread
let result = panic::catch_unwind(move || {
// do some work
worker(opt.iterations);
});
// process errors
match result {
_ => {}
}
// signal thread exit
GLOBAL_THREAD_COUNT.fetch_sub(1, Ordering::SeqCst);
});
}
// Wait for other threads to finish.
while GLOBAL_THREAD_COUNT.load(Ordering::SeqCst) != 0 {
thread::sleep(Duration::from_millis(1));
}
}
ошибка:
error[E0382]: use of moved value: `opt`
--> src/main.rs:80:23
|
74 | let opt = Opt::from_args();
| --- move occurs because `opt` has type `Opt`, which does not implement the `Copy` trait
...
80 | thread::spawn(move|| {
| ^^^^^^ value moved into closure here, in previous iteration of loop
...
84 | worker(opt.iterations); // TODO: make configurable (in database)
| --- use occurs due to use in closure
Я понимаю, что право собственности вызывает проблему, но использование &opt.iterations
вместо этого не помогает, и это в основном конец моих (ограниченных) знаний о ржавчине.
Мне нужно передать этот параметр в реальную рабочую функцию.