【发布时间】:2022-12-28 21:13:41
【问题描述】:
我有这个结构:
pub struct NonSteamGame {
app_id:String ,
app_name:String,
start_dir:String,
icon:String,
shortcut_path:String,
launch_options:String,
is_hidden:bool,
allow_desktop_config:bool,
allow_overlay:bool,
open_vr:bool,
devkit:bool,
devkit_game_id:String,
devkit_override_app_id:String,
last_play_time:String,
flatpack_app_id:String
}
所有这些字段值都从流中读取并在读取时设置。
有什么方法可以创建实例而无需手动初始化所有结构成员以在我从流中获取它们的值时分配它们?一个例子(伪代码):
let nsg = NonSteamGame {} //Do not initialize all values manually here
... get property_name and value from stream...
match property_name {
"appid" => nsg.app_id = String::new(value)
"AppName" => nsg.app_name = String::new(value)
"StartDir" => ...
"icon" => ...
}
我知道我可以将 #[derive(Default)] 用于标量类型,但它似乎不适用于 String 类型。
【问题讨论】:
-
Default是为String实现的。您能否更详细地解释什么不起作用? -
当我使用类似 let a = NonSteamGame{}; 的东西时我收到一堆错误,指出结构字段中缺少 app_id,et...。也许这不是正确的语法?
-
您可以尝试构建器模式。 This crate 甚至为您的结构编写构建器
-
@Notbad 一旦派生
Default,使用NonSteamGame::default()获取具有默认值的结构实例
标签: rust struct initialization lazy-initialization