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
社区学习交流平台订阅:
评论区
写评论还没有评论