gpt4 book ai didi

lifetime - 在 Rust 中生根管理值

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

我正在尝试将 str 转换为 Reader,但失败了。

下面的代码所做的是使用 with_str_reader 从 str 中提取 Reader

use std::io::{with_str_reader,Reader};

pub struct ReadSource<'self> {
priv source: &'self Reader
}

impl<'self> ReadSource<'self> {

fn from_str(data: &'self str) -> ReadSource<'self>{
let r = std::io::with_str_reader(data, |reader| { reader });
ReadSource{
source : r
}
}
}

fn main() {
//Ignore
}

运行时得到的结果如下

test.rs:12:21: 12:22 error: cannot root managed value long enough
test.rs:12 source : r

^
test.rs:9:54: 14:5 note: managed value would have to be rooted for the lifetime &'self as defined on the block at 9:54...
test.rs:9 fn from_str(data: &'self str) -> ReadSource<'self>{

test.rs:10 let r = std::io::with_str_reader(data, |reader| { reader });

test.rs:11 ReadSource{

test.rs:12 source : r

test.rs:13 }

test.rs:14 }

我知道我必须使用 self lifetime 来转换一些东西,但我不确定是什么?!

最佳答案

看看https://github.com/mozilla/rust/issues/5723 (以及 std::io::with_str_reader 的源代码)。

基本上,with_str_reader 目前基本上是不健全的,你正在做的是严重地绊倒它,因为不允许像那样让值从闭包中逃逸—— with_foo 模式意味着您只能在内部和内部使用它。

关于lifetime - 在 Rust 中生根管理值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623669/

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