ConsoleOutputMode::Tty => {
// If running on an interactive TTY then accept input
// SAFETY: trivially safe
if unsafe { libc::isatty(libc::STDIN_FILENO) == 1 } {
// SAFETY: STDIN_FILENO is a valid fd
let stdin_clone = unsafe { File::from_raw_fd(libc::dup(libc::STDIN_FILENO)) };
// SAFETY: FFI calls with correct arguments
let ret = unsafe {
let mut flags = libc::fcntl(stdin_clone.as_raw_fd(), libc::F_GETFL);
flags |= libc::O_NONBLOCK;
libc::fcntl(stdin_clone.as_raw_fd(), libc::F_SETFL, flags)
};
if ret < 0 {
return Err(Error::SetNonBlocking(std::io::Error::last_os_error()));
}
stdin_clone
} else {
return Ok(None);
}
}
楼主没有一点 rust 基础,看到倒数第 5 行的
stdin_clone
直接蒙了,不知道这是个什么鬼
希望 v 友给一个介绍这种写法的教程链接让我看看
1
israinbow 2023-11-03 16:04:21 +08:00 1
上面做过错误处理所以直接返回 stdin_clone 了, 这层函数是个 λ 表达式, 直接返回值.
|
2
israinbow 2023-11-03 16:05:58 +08:00 2
@israinbow #1 当然这属于 rust 的一个申必写法之一就是返回值不用加 return 关键字, 直接摆一个变量前后不加任何关键字或者符号, 分号都不要.
|
3
Lzzzt 2023-11-03 16:06:46 +08:00 1
这不是前面那个变量么,rust 代码块中最后一句可以自动作为返回值的
就和这个一样 ```rust fn five() -> i32 { 5 } ``` |
4
jujusama 2023-11-03 16:15:19 +08:00 1
|
5
knightdf 2023-11-03 21:07:31 +08:00
跟 scala 里的隐式 return 一个意思,只是必须不写分号
|
6
sxfscool 2023-11-29 09:08:21 +08:00
就是 return
|