Rust 与 NoSQL 数据库开发指南
1. Rust 中的契约编程
在 Rust 里,实现契约并非只有之前展示的那种在结构体中使用 trait 并显示前置条件的方式。我们还能编写一个包含 main 函数,可能还有其他函数的简单程序。所有函数都可以有前置和后置条件,下面来看一个小函数如何在小项目里实现这两者。
use contracts::*;
#[pre(x > 0, "x was not sufficiently large")]
#[post(x < 15, "x is too large")]
fn do_something(mut x: i32)
{
println!("{}", x);
x = 25;
}
fn main() {
do_something(4);
}
这里的前置条件和之前看到的一样,现在还多了后置条件。后置条件能确保程序状态可控,因为返回的任何值都在预期范围内。除了返回值,函数执行过程中还可能有副作用,比如调用其他函数,但在这个例子里没有这种情况。当调用其他函数时,会产生本函数无法控制的副作用,本函数仅对其直接控制的数据负责。后置条件不只是检查程序作用域内的值,还能调用函数检查更广泛程序中的值或状态,以确保函数执行后没出问题。
在实际生产环境中,我们不希望程序崩溃,所以代码里最好少用 panic 。 contracts 包不仅有 pre 和 post 属性,还有
超级会员免费看
订阅专栏 解锁全文
935

被折叠的 条评论
为什么被折叠?



