如何使用预定义值和可选值创建某些结构的元素

问题描述 投票:0回答:1

在 Rust 中完成我的第一步,但不太确定这篇文章的标题是什么。

我尝试遵循函数式风格的简单工厂模式,使用一些预定义值动态创建用户。

struct User {
    active: bool,
    username: Option<String>,
    email: Option<String>,
}

fn make_active_user(fields: User) -> User {
    User {
        active: true,
        email: Some("[email protected]".to_string()),
        ..fields
    }
}

我来自 JS\TS 世界,我可以使用解构来通过我想要在具体时刻传递的值来填充目标对象。但我在 Rust 中找不到类似的东西。此外,我不明白如何将用户类型分为两部分 - 强制和可选(如果在这里有意义)以至少传递 nessesery 字段。

fn main() {
    let new_user = make_active_user(User {
        username: Some(String::from("Default Name")),
        active: false, // can't get rid of this
        email: Some(String::from("uhh...")), // can't get rid of this
    });
}

我只想通过

username
,但我会得到:

错误[E0063]:初始化程序中缺少字段

active
email
User

我明白“为什么”,但不明白“如何得到它”。

所以我的问题 - 我必须如何修改此代码才能仅传递给 nessesery 值(即本例中的

make_active_user
)并跳过其他值? 事实上,我更愿意传递可变数量的字段值,但我开始相信 JS 模式在这里没有意义。

链接到游乐场

也许我完全错了,所以我们将不胜感激!

rust struct destructuring
1个回答
0
投票
username

类型添加

derive
Default
特征,并添加
User
来创建特定类型的
impl
,并根据需要设置字段:
User

© www.soinside.com 2019 - 2024. All rights reserved.