gpt4 book ai didi

rust - 你能在生命周期系统中表达 'valid for lifetime of returned value' 吗?

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

这个问题我遇到过好几次。

  • 您有需要执行任务的数据。

  • 您想安全地将数据发送到任务并进行远程处理。

  • ...你还等什么结果。

像这样的围栏:http://is.gd/fnhRta

use std::thread::Thread;

#[derive(Debug)]
struct Foo<'a> {
fp: &'a u32
}

impl<'a> Foo<'a> {
fn new(v:&'a u32) -> Foo<'a> {
return Foo {
fp: v
};
}
}

fn main() {
let value = 100;
let foo = Foo::new(&value);
let guard = Thread::scoped(|| {
println!("{:?}", foo);
});

// We know foo is valid in the remote thread, because guard is in the same
// scope of foo... but how do we express that using lifetimes?
guard.join();
}

是否可以使用生命周期来表达这一点?

本质上只接受 Foo<'a> 的东西,其中 <'a> <= 当前 { ... } block 的生命周期。

最佳答案

您编写的代码现在可以运行了:

use std::thread;

#[derive(Debug)]
struct Foo<'a> {
fp: &'a u32
}

impl<'a> Foo<'a> {
fn new(v: &'a u32) -> Foo<'a> {
Foo { fp: v }
}
}

fn main() {
let value = 100;
let foo = Foo::new(&value);
let guard = thread::scoped(|| {
println!("{:?}", foo);
});

// We know foo is valid in the remote thread, because guard is in the same
// scope of foo... but how do we express that using lifetimes?
guard.join();
}

这可能是由于 RFC 458 ,这放宽了对 Send/Sync 的限制。现在,thread::scoped返回一个与闭包具有相同生命周期的 JoinGuard

关于rust - 你能在生命周期系统中表达 'valid for lifetime of returned value' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557650/

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