gpt4 book ai didi

rust - 我怎样才能从借用它的参数的函数返回 None ,或者避免需要这样做?

转载 作者:行者123 更新时间:2023-11-29 08:10:13 25 4
gpt4 key购买 nike

我有一个 Option 切片,并给定一个值,如果该值是切片中的有效索引,我想使用该索引处的值,否则使用 None .

现在,值需要能够被重用,所以我想我想从我的切片中借用,而不是移动...注意 Foo没有实现 Copy特质,我更愿意保持这种状态。

我需要经常这样做,所以函数返回 &Option<Foo>似乎是合适的,加上一个生命周期说明符,因为显然返回值不应该超过它借用的切片。这让我想到:

fn get_or_none<'a>(data: &'a [Option<Foo>], bar: u8) -> &'a Option<Foo> {
match bar as usize {
idx if idx < data.len() => &data[idx],
_ => &None // obviously can't work
}
}

这显然是错误的。我现在可以作弊,因为我知道对于这个特定的应用程序,切片中的第一个值将始终为 None(可以这么说,这是我的数据的一个属性),但这只是为了避免这个问题。

我应该怎么做?

最佳答案

您可以采用以下几种方法:

  1. 再添加一层Option ness,返回一个 Option<&Option<Foo>> .我猜你不想这样做。

  2. 返回 Option<&Foo>而不是 &Option<Foo> :

    fn get_or_none(data: &[Option<Foo>], bar: u8) -> Option<&Foo> {
    match data.get(bar as usize) {
    Some(&Some(ref foo)) => Some(foo),
    _ => None,
    }
    }
  3. 存储一个合适的None作为静态并返回对它的引用。它的生命周期是 'static (只要 Foo'static ),所以对它的引用可以缩短为 'a没有问题。

    static NO_FOO: Option<Foo> = None;

    fn get_or_none(data: &[Option<Foo>], bar: u8) -> &Option<Foo> {
    data.get(bar as usize).unwrap_or(&NO_FOO)
    }

关于rust - 我怎样才能从借用它的参数的函数返回 None ,或者避免需要这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com