【问题标题】:unwrap_or in rust that returns two values?unwrap_or in rust 返回两个值?
【发布时间】:2021-04-09 06:03:24
【问题描述】:

如何编写这样的函数:

pub fn unwrap_some_or_none_with_error(input: Option<&'static str>) -> &str {
    input.unwrap_or(0)
}

所以当 None 被发送到这个函数时它会返回 0,而当像 Some 这样的 Option 被发送时它会解开它?

【问题讨论】:

  • unwrap_or 就是这样做的。这里的问题是您的类型没有意义:该函数应该返回 &amp;str 但您的 unwrap_or 具有 integer 默认值。 0 不是字符串。
  • 这就是我要问的,我希望它返回解包结果,或者如果没有则返回 0。这可能吗?
  • 不,因为我注意到类型不匹配。 0 是一个整数,整数不是字符串,你的函数被键入返回字符串。 "0" 可以正常工作,但我不知道你为什么要退回这样的东西。
  • 0 解包后您想做什么?可能有一种更惯用的方式来做你想做的事,但从这个问题来看,这可能是什么并不明显。例如,您可以在匹配的两个分支中或在附加到Option 上的方法的闭包中处理这两种情况。

标签: rust


【解决方案1】:

这是不可能的:Rust 是一种类型化的语言,所以一切都只能有一个类型。执行您所描述的操作的惯用方法是使用Result,它可以保存一个值或一个错误。这个Result可以用ok_or创建:

pub fn unwrap_some_or_none_with_error(input: Option<&'static str>) -> Result<&str, i32> {
    input.ok_or(0)
}

【讨论】:

  • Result&lt;&amp;str, i32&gt; 是否意味着它期望在返回的结果中同时包含 &amp;stri32
  • 不,这意味着它希望 要么 如果一切顺利 i32 以防出错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2011-01-01
  • 2014-04-08
  • 1970-01-01
  • 2017-09-10
  • 2013-08-31
相关资源
最近更新 更多