首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使`unwrap_or`返回零向量?

如何使`unwrap_or`返回零向量?
EN

Stack Overflow用户
提问于 2022-08-31 21:53:10
回答 1查看 47关注 0票数 1

我有一个带有Option<Vec<...>>的结构,在某个时候需要生成包含在其中的数据,或者在None的情况下生成一个零数组。我尝试过多种方法,但我总是遇到编译错误。我应该如何编码bar函数?

代码语言:javascript
复制
pub struct Foo {
  pub data: Option<Vec<u32>>
}

impl Foo {
  fn bar(&self) -> &Vec<u32> {
    self.data.as_ref().unwrap_or_else(|| &vec![0, 10])
  }
}

fn main() {
  let foo = Foo { data: None };
  println!("{:?}", foo.bar());
}
代码语言:javascript
复制
> rustc main.rs
error[E0515]: cannot return reference to temporary value
 --> main.rs:7:42
  |
7 |     self.data.as_ref().unwrap_or_else(|| &vec![0, 10])
  |                                          ^-----------
  |                                          ||
  |                                          |temporary value created here
  |                                          returns a reference to data owned by the current function

error: aborting due to previous error

For more information about this error, try `rustc --explain E0515`.
EN

回答 1

Stack Overflow用户

发布于 2022-08-31 22:34:46

正如其他人所指出的,由于其他原因,返回一个片比较好,但它也使这个方法的实现更容易--您可以只获取一个静态数组的一个片段:

代码语言:javascript
复制
pub struct Foo {
  pub data: Option<Vec<u32>>
}

impl Foo {
  fn bar(&self) -> &[u32] {
    self.data.as_deref().unwrap_or(&[0; 10])
  }
}

fn main() {
  let foo = Foo { data: None };
  println!("{:?}", foo.bar());
}

(游乐场)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73562275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档