0
点赞
收藏
分享

微信扫一扫

【Rust 日报】2021-11-25 Rust中的函数重载和可选参数事例

茗越 2022-06-29 阅读 64

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

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

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


  • /u/scook0 在 /r/rust 谈到

这段话是这篇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,不然大部分时候日报内容都是英文社区搬运过来的,还是希望中文社区能更活跃一些。


社区学习交流平台订阅:

  • Rust.cc 论坛: 支持 rss
  • 微信公众号:Rust 语言中文社区



举报

相关推荐

0 条评论