2013-09-04 3 views
2

Я пытаюсь преобразовать str в Reader и терпеть неудачу.Корневая управляемая величина в Rust

Что ниже кода делает это извлечение чтения из str с помощью with_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  } 

Я знаю, что я должен бросить что-то, с чувством собственного времени жизни, но я «Не знаете, что ?!

ответ

1

Посмотрите на https://github.com/mozilla/rust/issues/5723 (также в источнике std::io::with_str_reader).

В принципе, with_str_reader в настоящее время в основном необоснованно, и то, что вы делаете, плохо срабатывает, потому что разрешение на выход из закрытого типа не допускается - шаблон with_foo означает, что вы можете использовать это внутри и внутри только.

+0

Так что мне нужно использовать «BytesReader» в качестве Reader, правильно? –

+1

@ DanielFath: Я не знаю; Я не работал с ним и не успел понять это сейчас. В текущем главном ветви вы будете использовать новый материал времени выполнения, который в любом случае несколько отличается. –

+0

Когда эти земли изменились? Я спрашиваю, потому что я собрал из источника примерно две недели назад. Есть ли примеры новой среды выполнения? –

Смежные вопросы