環境
- Ubuntu 19.10
- cargo 1.39.0
質問したいこと
今読んでいる Rust のコードで次のようなコードがありました。
rust
1use structopt::StructOpt; 2 3#[derive(Debug, StructOpt)] 4#[structopt(name="ruplacer")] 5struct Opt { 6 #[structopt(long = "go")] 7 go: bool, 8 9 #[structopt(help = "The pattern to search for")] 10 pattern: String, 11 12 #[structopt(help = "The replacement")] 13 replacement: String, 14 15 #[structopt( 16 parse(from_os_str), 17 help = "The source path. Default to the working directory" 18 )] 19 path: Option<PathBuf>, 20 21 // (省略) 22} 23 24fn main() { 25 let args: Vec<_> = std::env::args().collect(); 26 if args.contains(&"--type-list".to_string()) { 27 on_type_list(); 28 return; 29 } 30 31 let opt = Opt::from_args(); 32 let dry_run = !&opt.go; 33 34 let color_when = &opt.color_when.unwrap_or(ColorWhen::Auto); 35 configure_color(&color_when); 36 37 let path = opt.path; 38 let path = path.unwrap_or_else(|| Path::new(".").to_path_buf()); 39 40 let Opt { // <- ここがわからない 41 pattern, 42 replacement, 43 word_regex, 44 .. 45 } = opt; 46 47 // (省略) 48}
このコードはこちらの GitHub リポジトリの main.rs
から引用しています。
このコードの main
関数の中で、let Opt
から始まる部分の挙動が理解できません。この式の左辺が右辺に来ており、左辺に指定されている変数に代入するというものはよく見ると思うのですが、 Opt{}
が左辺に来ると、opt
が Opt{}
に代入されるのでしょうか?
また、let Opt{}
の最後に2つのドットがありますが、この挙動もよくわかりません。ドキュメントなどを見ると ..
のあとに構造体のインスタンスの名前を指定することでこのインスタンスの持つ変数の値を踏襲できるという使い方は書いてあるのですが、 ..
のあとに何も指定しないとどうなるのでしょう?
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/05 10:20