Даже прочитав главы о владении ссылками и заимствовании, я не могу понять некоторые вещи в следующем коде, что фактически мешает мне вызывать более одного метода из clap::App
!
extern crate clap;
use clap::App;
fn main() {
let mut app =
App::new("name me").args_from_usage("<input_file> 'Sets the input file to use'");
let matches = app.get_matches();
app.print_help();
println!(
"Using input file: {}",
matches.value_of("input_file").unwrap()
);
}
Компиляция этого кода приводит к:
error[E0382]: use of moved value: `app`
--> src/main.rs:9:5
|
8 | let matches = app.get_matches();
| --- value moved here
9 | app.print_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
- Если я правильно понимаю,
app.get_matches()
просит одолжить право собственности, таким образом,app
должно бытьmut
. Куда уходит право собственности после возврата функции? - Я думал, что
app
по-прежнему будет владеть объектом, но у компилятора другое мнение.
Как я могу получить совпадения и эффективно вызвать другой метод, например print_help
на app
?