Struct 使用envive时,如何使用匹配结果填充结构实例?

Struct 使用envive时,如何使用匹配结果填充结构实例?,struct,rust,match,Struct,Rust,Match,我想用匹配环境变量的结果填充可变变量: 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) => pr

我想用匹配环境变量的结果填充可变变量:

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
};
struct环境{
某些_环境_变量_1:String,
某些_环境_变量_2:String,
某些_环境_变量_3:String,
一些_env_变量_4:String,
}
匹配嫉妒::from_env::(){
Ok(环境)=>println!(“{:#?}”,环境),
Err(error)=>panic!(“{:#?})”,error),
};
//我被困的地方
让mut e=环境{
某些_env_variable_1://希望它来自匹配
};

您正在调用envy方法,该方法为您执行所有解析和填充操作。问题是,您丢弃了结果——它仅在
匹配中可用:

match envy::from_env::<Environment>() {
    Ok(environment) => println!("{:#?}", environment), // gone now
    Err(error) => panic!("{:#?})", error),
};

完整示例:

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=溢出端口=8787货物运行
环境{
用户名:“溢出”,
港口:8787
}

非常感谢,我没意识到它在最后一行就把它扔掉了。我尝试了不太惯用的方法,但没有阻止它,所以我想它还是会扔掉。@Joe说得很清楚,不是
{}
决定了丢弃与否,而是
匹配
表达式之前的
let environment=
<代码>确定(环境)=>环境,
也可以工作。(假设这就是你所说的“阻止它”)@trentcl我明白了。是的,我注意到了大括号,刚刚意识到rust中的返回值通常与最后一个语句是隐式的,因此我看到在
Ok(environment)=>
之后有
environment
。非常感谢。
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);
}