一、发散函数(diverging function)
Rust搞了这个么一个发散函数(diverging function),确实是被撞了一下腰。翻了下文档,发散函数就是用!作为返回类型收尾,不再返回的一种函数。需要注意的是,函数中不返回的函数有很多,但只有发散函数这种不返回,也不会向下执行,或者说当前线程就崩溃了,退出了。而其它不返回的函数,程序仍然会继续向下执行。最简单的例子就是在loop循环中调用一些不返回的函数来反复监听或者执行某项任务。
在发散函数后面,如果仍然有一些其它的代码,编译器会报类似下面的警告“warning: unreachable statement --> src\main.rs:4:5”。
所以说,发散函数可以作为一种意外的条件让线程终止的方式。一般来说它都是在panic!宏调用时使用或者其它发散函数的再调用。
二、例程
先看一个普通的不返回的函数:
fn main() {
println!("start work!");
nodiverging();
println!("this is ok!");
}
fn nodiverging() {
println!("OK,return");
}
再看发散函数的例程:
fn main() {
println!("start work!");
mydiverging();
println!("unreachable println!");
}
fn mydiverging() -> ! {
panic!("never return");
}
其实这个发散函数没有什么特别的,只是一种场景的具体的应用方式,大可不必把其中一些想得多么有难度。一个应用的新名字而已。
三、总结
Rust中的新名词不少,正如前面所分析的,Rust的目的是为了取代c++的地方,所以针对c++的一些弊病,进行了有效的改善进步虽大,但代价也不小。因此Rust的学习曲线是非常的陡峭,有心学习rust的同学们还是要心里有所准备。目前看来,Rust的还是有不少可取之处的。
苟日新,日日新!