我发现这个Rust代码用于从stdin
获取一行:
use std::io;
fn main() {
let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
println!("Input: {}", line);
}
io::stdin().read_line(&mut line)
将line
变量设置为从stdin
读取的行。根据我的理解,read_line()
会返回Result
值,可以进行模式匹配,如果.unwrap()
不是Err
,则可以使用read_line()
来获取内部值。
但是,永远不会使用line
的返回值。仅使用.unwrap()
字符串变量,但人们大多数时间都使用unwrap()
,即使它未被使用。
如果未使用返回值, .loader {
border-right: 16px solid #00ccff;
border-left: 16px solid #99ff00;
border-radius: 50%;
margin: 20% 45%;
border-top: 16px solid #99ff00;
border-bottom: 16px solid #00ccff;
width: 120px;
height: 120px;
}
的目的是什么?只是抛出一个错误?
答案 0 :(得分:10)
如果未使用返回值,
[('Tropical Disco fueled by Chandon Passion', 'SAT, 22 Jul 2017'), ('West House Crossover Connection VOL.5 -Zakuro 1st Anniversary', 'SAT, 22 Jul 2017'), ('SUBCULTURE', 'SAT, 22 Jul 2017')]
的目的是什么?只是抛出一个错误?
是的,但并非全部。
忽视潜在错误很糟糕;空D:\Parth\userprofiles>npm install oracledb --save
> oracledb@1.13.1 install D:\Parth\userprofiles\node_modules\oracledb
> node-gyp rebuild
D:\Parth\userprofiles\node_modules\oracledb>if not defined npm_config_node_gyp (
node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modu
les\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )
Building the projects in this solution one at a time. To enable parallel build,
please add the "/m" switch.
TRACKER : error TRK0005: Failed to locate: "CL.exe". The system cannot find the
file specified. [D:\Parth\userprofiles\node_modules\oracledb\build\oracledb.vc
xproj]
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` fail
ed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\
npm\node_modules\node-gyp\lib\build.js:276:23)
gyp ERR! stack at emitTwo (events.js:106:13)
gyp ERR! stack at ChildProcess.emit (events.js:191:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_proces
s.js:215:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodej
s\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd D:\Parth\userprofiles\node_modules\oracledb
gyp ERR! node -v v6.11.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm WARN userprofiles@1.0.0 No repository field.
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\
node_modules\\npm\\bin\\npm-cli.js" "install" "oracledb" "--save"
npm ERR! node v6.11.0
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! oracledb@1.13.1 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the oracledb@1.13.1 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the oracledb package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs oracledb
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls oracledb
和unwrap()
之间由于错误而未被阅读,因此存在很大差异;例如,在典型的"管道中#34;命令在shell中,程序需要在停止接收输入时停止,否则用户必须将其删除。
在C中,忽略错误太容易了。许多语言通过例外来解决这个问题,但Rust没有。
为了避免困扰C程序的问题,它很容易忘记检查返回代码,通常Rust函数会在line
中捆绑预期的返回值和错误,这样你< em>有来检查它以获得返回值。
但是还有一个潜在的问题:如果来电者不关心返回值怎么办?最值得注意的是,当值为line
时,没有人真正关心它。
这里调用了一些编译器魔法:Result
结构标有()
属性。此属性使必须在Result
返回时执行某些操作。
因此,在你的情况下,不仅是打包好,它也是做某事的最简单的方法&#34;并避免编译警告。
答案 1 :(得分:2)
如果你不想优雅地&#34;处理无法从标准输入读取一行的情况(例如,通过再次尝试或选择默认值),您可以使用unwrap()
来触发恐慌;它使由Result
未使用的警告静音:
warning: unused result which must be used
--> src/main.rs:5:5
|
5 | io::stdin().read_line(&mut line);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default