我有兴趣在功能上类似于Rust中的关键字参数,目前不支持它们。
对于提供关键字参数的语言,这种情况很常见:
panel.button(label="Some Button")
panel.button(label="Test", align=Center, icon=CIRCLE)
Run Code Online (Sandbox Code Playgroud)
我已经看到使用builder-pattern处理此问题,例如:
ui::Button::new().label("Some Button").build(panel)
ui::Button::new().label("Test").align(Center).icon(CIRCLE).build(panel)
Run Code Online (Sandbox Code Playgroud)
很好,但与Python中的关键字参数相比有时有些尴尬。
但是impl Default,Option<..>在Rust中使用带有和成员的结构初始化可用于获得非常接近的东西,这实际上类似于编写关键字参数,例如:
ui::button(ButtonArgs { label: "Some Button".to_string(), .. Default::default() } );
ui::button(ButtonArgs {
label: "Test".to_string(),
align: Some(Center),
icon: Some(Circle),
.. Default::default()
});
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是在尝试用作关键字args的上下文中存在一些缺点:
structSome(..)每个可选参数很烦人/冗长。.. Default::default() 每次使用结束时都有些乏味。有什么方法可以减少其中的一些问题(例如使用宏),以使其更轻松地代替关键字访问?