2

我正在尝试将 a 转换str为 aReader并努力失败。

下面的代码所做的是从str使用 with_str_reader中提取 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     }

我知道我必须用自己的生命来铸造一些东西,但我不确定是什么?!

4

1 回答 1

1

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

基本上,with_str_reader目前基本上是不健全的,你正在做的事情是把它搞砸了,因为让值从闭包中逃逸是不应该被允许的——这种with_foo模式意味着你只能在内部和内部使用它。

于 2013-09-05T01:32:47.683 回答