Rust具有单元类型,()具有单个零大小值的类型.此单位类型的值也使用().
单位类型及其价值的目的是什么?它是一种避免像其他语言一样使用null(或nil)的机制吗?
我正在编写一个函数,该函数在成功(和失败)时返回 serde_json::Value。以前在 Rust 中,我一直省略分号以从函数返回数据,如下面的代码示例所示:
use serde_json::{Result, Value};
use core::result::Result as ResultCore;
fn returning_function() -> ResultCore<Value, Value> {
let data = r#"
{
"status": "ok",
"response": {
"data": "secret message!"
}
}
"#;
match str_to_json(data) {
Ok(json_data) => match json_data["status"].as_str() {
Some(status_str) => {
if status_str == "ok" {
Ok(json_data["response"].clone())
}
}
None => eprintln!("\"status\" was not a string")
}
Err(error) => eprintln!("something went wrong! here's what: {}", error)
}
Err(serde_json::Value::Null)
}
fn str_to_json(json_data: &str) -> Result<Value> {
Ok(serde_json::from_str(json_data)?)
}
Run Code Online (Sandbox Code Playgroud)
这是我不明白的部分:这不能编译。Rust …
我试图理解类似于以下内容的函数:
fn some_func(arg1: str, arg2: str) -> error::Result<()>
{
/// Do some stuff ...
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,()给定Ok和意味着什么?Result这是惯用语还是代码库的实现细节?
更新:编译了以下代码块,它可以作为更有用的 MVCE
fn main() -> Result<(), ()> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud) 从本教程:
如果没有else总是会导致()作为值.
为什么Rust强加了这个限制,并且不让一个if没有else返回其他值,如下所示:
let y = if x == 5 { 10 };
Run Code Online (Sandbox Code Playgroud)