やろうとしていること
Rustからシェルのコマンドを実行して出力を処理するプログラムを書こうと思っています。
環境
- Windows10
- Rust 1.55.0
コード
問題が生じているコードは以下のコードです。
rust
1use std::io; 2use std::process::Command; 3use regex::Regex; 4 5struct CondaEnvStatus { 6 is_exist: bool, 7 path: Option<&'static str>, 8} 9 10fn environment_exist() -> Result<CondaEnvStatus, String> { 11 let mut exist = false; 12 let mut env_path = ""; 13 match Command::new("conda").arg("env").arg("list").output() { 14 Ok(output) => { 15 let pattern = Regex::new(r"^thz\s+(.+)").expect("Invalid pattern"); 16 let pathes = String::from_utf8(output.stdout).unwrap(); 17 let lines = pathes.lines(); 18 for line in lines { 19 let cap = pattern.captures(line); 20 match cap { 21 Some(cap) => { 22 exist = true; 23 env_path = &cap[1]; 24 println!("Environment exist in: {}", &cap[1]); 25 break; 26 } 27 None => continue, 28 } 29 } 30 31 if !exist { 32 println!("Vurtural environment for the application does not exist"); 33 } 34 } 35 Err(msg) => { 36 return Err(msg.to_string()); 37 } 38 } 39 40 Ok(CondaEnvStatus { 41 is_exist: exist, 42 path: Some(env_path), 43 }) 44}
このコードの let lines = pathes.lines();
とenv_path = &cap[1]
のところで
bash
1`pathes` does not live long enough: assignment requires that `pathes` is borrowed for `'static`
bash
1`cap` does not live long enough: assignment requires that `cap` is borrowed for `'static`
のようなエラーが出ます。2番目に関してはcap
のライフタイムがmatch文の中で尽きているのでstaticを付けろということなのだと思うのですが、具体的にどこにstaticを付けたらいいのかわかりません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/29 01:21
2021/10/29 01:58