为什么返回Result的函数总是返回Err?

时间:2016-08-10 02:19:38

标签: rust

我在查看the missing_field function来源时遇到了Serde

/// Report that the struct has a field that wasn't deserialized
fn missing_field<V>(&mut self, field: &'static str) -> Result<V, Self::Error>
    where V: Deserialize,
{
    Err(Error::missing_field(field))
}

为什么这有用?为什么返回Result,如果它将无条件地Err

2 个答案:

答案 0 :(得分:5)

因为您没有包含该函数的上下文:

pub trait MapVisitor {

    // ...

    fn missing_field<V>(&mut self, field: &'static str) -> Result<V, Self::Error>
        where V: Deserialize,
    {
        Err(Error::missing_field(field))
    }
}

这是default trait method。实现此特征的每个类型都将免费获得此方法,如果它们没有做任何特殊操作,但可以选择重新实现它。据推测,大多数实现都不会实现该方法,但它也可能只是一个理智的默认值。

答案 1 :(得分:1)

正如@Shepmaster回答的那样,这只是数据格式的默认值,其中缺少的字段始终是错误。

有些数据格式中缺少的字段并不总是错误。 JSON是一个常见的例子。结构如下:

TextView

可以从JSON字符串newInstance()反序列化,其中字段&#34; b&#34;不见了。 JSON的Serde Deserializer将缺少的Option字段定义为#[derive(Deserialize)] struct S { a: i32, b: Option<i32>, }

Here is JSON's implementation of missing_field.