相关疑难解决方法(0)

如何在Rust中最好的* fake *关键字样式函数参数?

我有兴趣在功能上类似于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 DefaultOption<..>在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的上下文中存在一些缺点:

  • 必须为参数加上名称的前缀struct
    (还需要在名称空间中显式包含参数,这会增加一些开销)。
  • Some(..)每个可选参数很烦人/冗长。
  • .. Default::default() 每次使用结束时都有些乏味。

有什么方法可以减少其中的一些问题(例如使用宏),以使其更轻松地代替关键字访问?

parameter-passing keyword-argument rust

6
推荐指数
2
解决办法
841
查看次数

标签 统计

keyword-argument ×1

parameter-passing ×1

rust ×1