< 返回版块

Cupnfish 发表于 2021-11-25 22:45

Rust中的函数重载和可选参数事例

来自高级语言的我们,在创建和使用Rust中的函数时,常常会错过灵活性。Rust函数默认不具备以下功能。

  • 函数重载(通常出现在C++/Java/JS/C#中)

  • 可选参数(Python中的基本功能)

  • 命名参数(Python中的基本功能) 很多人说,Rust已经可以通过trait泛型struct来提供这些功能。但是,我还没有找到任何关于这方面的具体例子或者彻底的教程,特别是关于实现的利弊分析。 因此,我试图自己实现这些功能。结果发现,它们并不复杂,只需要trait泛型struct,没有宏,也没有nightly版本功能。下面是我的实现。

Github: https://github.com/tidunguyen/flexible-fn-rs

我很愿意分享我的实现。

  • 它作为参考,以便其他人可以在此基础上提供更复杂、更灵活的API

  • 我希望得到大家的反馈,因为我对Rust还不是很精通,特别是对于那些我怀疑在使用时会带来副作用的东西,比如泛型里的Sized约束。

  • 同时我也希望我的分享能作为证明Rust也可以有灵活的函数

以上是Reddit上原帖内容,代码示例在Github上,README就写的有,感兴趣的可以看一下。

本周周报

关于重构UB的话题,我想起了一篇关于历史文化中誓言和誓约的机制的文章

当程序员编写get_unchecked时,我们可以想象他们想向编译器承诺他们坚持其前提条件。但是,由于编译器通常对未经证实的断言不那么信任,程序员发誓说他们的论证是在边界内的。

编译器看到这样一个庄严的承诺,就把程序员的话当作真的,并相应地进行优化。编译器是如此彻底地相信,以至于它甚至从未考虑过怀疑程序员誓言的可能性。

但是,如果程序员发了假誓,那么他们很可能会受到神的报应,以鼻腔恶魔的形式出现--或者更糟糕的是,程序的行为也会变得微妙莫测。

这段话是这篇Blog的热评:https://blog.sigplan.org/2021/11/18/undefined-behavior-deserves-a-better-reputation/

这篇Blog讨论的是在Rust中的UB(undefined behavior)应该拥有更好的名声,举了几个例子说明编程语言里拥有UB能带来的好处。

Read More: https://this-week-in-rust.org/blog/2021/11/24/this-week-in-rust-418/

最后

中文社区征集各位的Rust相关的创作,直接发送到对应公众号就可以,链接和全文都OK,不然大部分时候日报内容都是英文社区搬运过来的,还是希望中文社区能更活跃一些。

From 日报小组 Cupnfish

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页