即使在阅读了有关引用所有权和借用的章节之后,我仍然无法理解以下代码中的某些内容,从而有效地阻止了我调用多个方法 from 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
on app
then?