Rust发散函数

一、发散函数(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的还是有不少可取之处的。
苟日新,日日新!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Rust语言本身没有提供类似于C语言中的`kbhit()`函数,该函数用于检测键盘是否有按键被按下。不过,你可以使用第三方库来实现类似的功能。 一个常用的库是`termion`,它提供了对终端操作的支持。你可以使用`termion`库中的`async_stdin()`函数来检测键盘输入。下面是一个使用`termion`库来实现类似于`kbhit()`函数的示例: 首先,在你的Cargo.toml文件中添加`termion`依赖: ```toml [dependencies] termion = "1.5.5" ``` 然后,你可以使用以下代码来检测键盘输入: ```rust use std::io::{self, Read}; use termion::async_stdin; fn main() { // 创建异步输入流 let stdin = async_stdin(); let mut stdin = stdin.lock(); // 设置非阻塞模式 let _ = termion::input::TermRead::set_nonblocking(&mut stdin); loop { // 尝试读取单个字符 let mut buf = [0u8; 1]; if let Ok(_) = stdin.read_exact(&mut buf) { // 检测到键盘输入 println!("Key pressed: {}", buf[0]); } // 其他逻辑处理 // ... } } ``` 在上面的示例中,我们使用`async_stdin()`函数创建了一个异步输入流。然后,我们将输入流设置为非阻塞模式,以便在没有输入时不会阻塞程序。接下来,我们使用循环来持续检测键盘输入。当检测到按键被按下时,我们打印出按下的键码。 请注意,该示例仅演示了如何使用`termion`库来检测键盘输入,并不是完整的实现。你可以根据自己的需求进行扩展和适应。 希望这个示例对你有帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值