錆は、既存の構造体を使用でき、そのメンバの一部をオーバーライドするだけの便利な機能を備えています。例えば、以下の構造体一部のメンバーだけが別の構造体の値を使用できる構造体を宣言するにはどうすればいいですか?
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)>,
}
の値は、構造体のインスタンス(例えばSomeTool::default()
)に渡すことで初期化することができます。
new_tool = SomeTool {
unique_id: "tool.foobar".to_string(),
exec: Some(foobar_exec)
.. SomeTool::default()
};
私は明示的にリストアップしなくてもSomeTool
を宣言することができるようにしたいですすべてのコールバック(将来、新しいコールバックを追加すると、コードベース全体にNone
が追加される可能性があります)。
これはうまくいきましたが、私は誤って他の初期化のためにunique_id
を残してしまい、default
にあるものを使用していました。
一部のメンバーをオーバーライドできますが、他のメンバーはオーバーライドできない構造体を記述する方法はありますか?
実世界のユースケースには、これよりも多くのメンバーが存在する(事故の可能性が高くなる)ことに注意してください。