
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 上面做过错误处理所以直接返回 stdin_clone 了, 这层函数是个 λ 表达式, 直接返回值. |
2 israinbow 2023-11-03 16:05:58 +08:00 @israinbow #1 当然这属于 rust 的一个申必写法之一就是返回值不用加 return 关键字, 直接摆一个变量前后不加任何关键字或者符号, 分号都不要. |
3 Lzzzt 2023-11-03 16:06:46 +08:00 这不是前面那个变量么,rust 代码块中最后一句可以自动作为返回值的 就和这个一样 ```rust fn five() -> i32 { 5 } ``` |
4 jujusama 2023-11-03 16:15:19 +08:00 |
5 knightdf 023-11-03 21:07:31 +08:00 跟 scala 里的隐式 return 一个意思,只是必须不写分号 |
6 sxfscool 2023-11-29 09:08:21 +08:00 就是 return |