gpt4 book ai didi

rust - 使用迭代器接口(interface)链接选项和结构字段的问题

转载 作者:行者123 更新时间:2023-12-03 11:44:07 25 4
gpt4 key购买 nike

我正在尝试使以下代码工作:

struct IntHolder {
ints: Vec<i32>,
}

impl IntHolder {
fn special_int(&self) -> Option<i32> {
return None;
}
fn all_ints(&self) -> impl Iterator<Item=&i32> {
return self.special_int().iter().chain(self.ints.iter());
}
}

fn main() {
let tst = IntHolder{ints: vec![0, 1, 2]};
for o in tst.all_ints() {
println!("{}", o)
}
}
但我得到这个错误:
   |
10 | return self.special_int().iter().chain(self.ints.iter());
| ------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| temporary value created here
奇怪的是,如果我将函数调用更改为内联 None而不是调用返回选项的函数,它可以工作:
struct IntHolder {
ints: Vec<i32>,
}

impl IntHolder {
fn special_int(&self) -> Option<i32> {
return None;
}
fn all_ints(&self) -> impl Iterator<Item=&i32> {
return None.iter().chain(self.ints.iter());
}
}

fn main() {
let tst = IntHolder{ints: vec![0, 1, 2]};
for o in tst.all_ints() {
println!("{}", o)
}
}

有谁知道如何使这项工作,或者为什么它似乎只在我调用函数来生成选项时才中断?
(这是说明我遇到的问题的玩具代码。在我的实际代码中,我有一个包含对象向量的结构,有时还有一个可以从其他字段计算的特殊对象。我想返回一个迭代器,如果可以计算,则迭代特殊对象,然后迭代向量中的所有对象。如果可以的话,我还想避免进行堆分配。)

最佳答案

问题是 iter获取对该值的引用而不是使用它,返回一个引用属于该函数的值的迭代器。
尝试使用 into_iter()反而:

return self.special_int().into_iter().chain(self.ints.iter());

关于rust - 使用迭代器接口(interface)链接选项和结构字段的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65853143/

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