当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Rust中最好的*fake*关键字样式函数参数?》经验,为你挑选了0个好方法。

我有兴趣在功能上类似于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 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()
});

这是可行的,但是在尝试用作关键字args的上下文中存在一些缺点:

必须为参数加上名称的前缀struct
(还需要在名称空间中显式包含参数,这会增加一些开销)。

Some(..)每个可选参数很烦人/冗长。

.. Default::default() 每次使用结束时都有些乏味。

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

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有