在 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
。User
我明白“为什么”,但不明白“如何得到它”。
所以我的问题 - 我必须如何修改此代码才能仅传递给 nessesery 值(即本例中的
make_active_user
)并跳过其他值?
事实上,我更愿意传递可变数量的字段值,但我开始相信 JS 模式在这里没有意义。链接到游乐场
username
类型添加
derive
Default
特征,并添加 User
来创建特定类型的 impl
,并根据需要设置字段:User