来自高级语言的我们,在创建和使用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也可以有灵活的函数
关于重构UB的话题, 我想起了一篇关于历史文化中誓言和誓约的机制的文章。当程序员编写 get_unchecked时,我们可以想象他们想向编译器承诺他们坚持其前提条件。但是,由于编译器通常对未经证实的断言不那么信任,程序员发誓说他们的论证是在边界内的。编译器看到这样一个庄严的承诺,就把程序员的话当作真的,并相应地进行优化。编译器是如此彻底地相信,以至于它甚至从未考虑过怀疑程序员誓言的可能性。 但是,如果程序员发了假誓,那么他们很可能会受到神的报应,以鼻腔恶魔的形式出现--或者更糟糕的是,程序的行为也会变得微妙莫测。
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。