我想用匹配环境变量的结果填充可变变量:
struct Environment {
some_env_variable_1: String,
some_env_variable_2: String,
some_env_variable_3: String,
some_env_variable_4: String,
}
match envy::from_env::<Environment>() {
Ok(environment) => println!("{:#?}", environment),
Err(error) => panic!("{:#?})", error),
};
//where I'm stuck
let mut e = Environment {
some_env_variable_1: // want this to be from match
};
最佳答案
您正在调用 envy 方法,该方法会为您完成所有解析和填充。问题是您丢弃结果 - 它仅在匹配
中可用:
match envy::from_env::<Environment>() {
Ok(environment) => println!("{:#?}", environment), // gone now
Err(error) => panic!("{:#?})", error),
};
你需要不要扔掉它:
let environment = match envy::from_env::<Environment>() {
Ok(environment) => {
println!("{:#?}", environment);
environment // Now the entire `match` evaluates to `environment`
}
Err(error) => panic!("{:#?})", error),
};
或者,更惯用的是,只需使用 expect
:
let environment: Environment = envy::from_env()
.expect("Couldn't parse environment");
println!("{:#?}", environment);
完整示例:
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate envy;
#[derive(Debug, Deserialize)]
struct Environment {
username: String,
port: u16,
}
fn main() {
let mut environment: Environment = envy::from_env()
.expect("Couldn't parse environment variables");
println!("{:#?}", environment);
}
$ USERNAME=overflow PORT=8787 cargo run
Environment {
username: "overflow",
port: 8787
}
关于struct - 使用 envy 时如何用匹配结果填充结构体实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816614/