gpt4 book ai didi

rust - 如何修复由于 RFC 1214 导致的生命周期错误

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

考虑以下代码:

pub fn use_r<I, R>(xs: I, r: &R) {
unimplemented!()
}

fn test<'a, R>(r: &'a mut R) {
let a = |r: &'a mut R| {
[(|| use_r(vec![0.].into_iter(), r))()]
};
a(r);
// a(r);
}

fn test2<R>(r: &mut R) {
let a = |r: &mut R| {
[(|| use_r(vec![0.].into_iter(), r))()]
};
a(r);
a(r);
}

Rust Playground

test 使用最新的 nightly 编译,但我不能调用 a(r); 两次。 test2 使用 stable 编译并执行我想要的操作,但它不会在 nightly 上编译。

动机是我有一个 RNG,我想在不同的时间将其传递到内部闭包中。我需要做什么才能让 test2 编译?

最佳答案

我不确定为什么编译器不接受您的 test2 函数。如果你消除不必要的嵌套 lambda,它编译得很好:

fn test2<R>(r: &mut R) {
let a = |r: &mut R| {
[use_r(vec![0.].into_iter(), r)]
};
a(r);
a(r);
}

我还发现,如果您使用具有显式生命周期的共享引用,编译器会接受代码:

fn test2<'a, R>(r: &'a mut R) {
let a = |r: &'a R| {
[(|| use_r(vec![0.].into_iter(), r))()]
};
a(r);
a(r);
}

我不确定为什么它不能与 &mut 引用一起使用,或者为什么编译器不能自动推断生命周期。

你真的有一个不必要的(立即调用的)嵌套 lambda 吗?我怀疑您过度简化了代码,并且提出了与您想问的问题不同的问题。

关于rust - 如何修复由于 RFC 1214 导致的生命周期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708854/

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