Rust ma przydatną funkcję, w której można użyć istniejącej struktury i zastąpić tylko niektórych jej członków. Na przykład, z następujących wartości strukturyJak zadeklarować strukturę, w której tylko niektórzy członkowie mogą używać wartości z innej struktury?
struct SomeTool {
pub unique_id: String,
pub poll: Option<fn(&Context) -> bool>,
pub exec: Option<fn(&mut Context) -> ToolResult>,
pub modal: Option<fn(&mut Context) -> ToolResult>,
pub ui: Option<fn(&mut UIPanel)>,
}
może być inicjowane przez przejście na przykład na strukturę (np SomeTool::default()
)
new_tool = SomeTool {
unique_id: "tool.foobar".to_string(),
exec: Some(foobar_exec)
.. SomeTool::default()
};
że chcą mieć możliwość uznania SomeTool
bez jawnie wymienić każde wywołanie zwrotne (dodanie nowych wywołań zwrotnych w przyszłości może doprowadzić do wielu dodatków None
w całym kodzie źródłowym).
To działa dobrze, ale teraz mogłem przypadkowo pominąć unique_id
dla innej inicjalizacji i używałbym tego, co jest w default
.
Czy istnieje sposób na opisanie struktury, która może mieć niektórych członków zastąpione, ale nie inni?
Należy pamiętać, że rzeczywisty przypadek użycia ma więcej członków niż ten (zwiększając prawdopodobieństwo wypadków), po prostu uproszczony dla pytania.