我有兴趣在功能上类似于Rust中的关键字参数,目前不支持它们。
对于提供关键字参数的语言,这种情况很常见:
panel.button(label="Some Button") panel.button(label="Test", align=Center, icon=CIRCLE)
我已经看到使用builder-pattern处理此问题,例如:
ui::Button::new().label("Some Button").build(panel) ui::Button::new().label("Test").align(Center).icon(CIRCLE).build(panel)
很好,但与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() });
这是可行的,但是在尝试用作关键字args的上下文中存在一些缺点:
必须为参数加上名称的前缀struct
(还需要在名称空间中显式包含参数,这会增加一些开销)。
放Some(..)
每个可选参数很烦人/冗长。
.. Default::default()
每次使用结束时都有些乏味。
有什么方法可以减少其中的一些问题(例如使用宏),以使其更轻松地代替关键字访问?