よりさえも参照の所有権および借入に関する章を読んだ後、私は効果的に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:
|
| let matches = app.get_matches();
| --- value moved here
| app.print_help();
| ^^^ value used here after move
|
= note: move occurs because `app` has type `clap::App<'_, '_>`, which does not implement the `Copy` trait
error: aborting due to previous error
- 、
app.get_matches()
は、このようにapp
はmut
にする必要があり、所有権を借りるように求められます。関数が返ったら、所有権はどこに行きますか? - 私は
app
はまだオブジェクトの所有権を持つことになり、まだコンパイラは異なる見解を持っていると思いました。
などの別のメソッドを有効に呼び出すにはどうすればapp
に入りますか?
ここに私の大きな誤解の光を放つためにありがとう!いくつかの点でちょっと変わった感じですね、最初は... – Jiehong
@Jiehongええ、間違いなく学習曲線はありますが、ほとんどすべてが既存の理由があります。この場合、このライブラリがこのように設計されている理由を正確に説明できたらと思います。私が提供できる最良の方法は、 'clap :: App'ドキュメントがビルダーとしての自分自身を参照することです。一般に、いったんビルドすると、ビルダーはそのプロセスで消費されます。 – Shepmaster
@Shepmasterはうまく説明しました。これを追加してもいいです:多くのコマンドラインツールは、 'java'や' cloc'を含む、裸のコマンド呼び出しに関する完全なヘルプを表示します。だから、@ Jiehongが拍手で完全なヘルプメッセージを提供してほしいと思うのは合理的だと思う。私はまだクラップでこの動作を提供する簡単な方法を発見していない。 –