2017-12-10 32 views
0

私はエラーを取得し、これをコンパイルこのコードの生涯の問題を解決するにはどうすればよいですか?

pub struct Map<'a, F, I, O> 
    where F: Fn(I) -> O { 
    parser: &'a Parser<'a>, 
    mapper: F, 
    phantomDataI: PhantomData<I>, 
    phantomDataO: PhantomData<O> 
} 

impl<'a, F, I, O> Map<'a, F, I, O> 
    where F: Fn(I) -> O { 
    fn new(parser: &'a Parser, mapper: F) -> Map<'a, F, I, O> { 
     Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
    }   
} 
...

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements 
    --> src\combinator\mod.rs:123:9 
    | 
123 |   Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
    |   ^^^ 
    | 
note: first, the lifetime cannot outlive the lifetime 'a as defined on the impl at 120:1... 
--> src\combinator\mod.rs:120:1 
    | 
120 |/impl<'a, F, I, O> Map<'a, F, I, O> 
121 | |  where F: Fn(I) -> O { 
122 | |  fn new(parser: &'a Parser, mapper: F) -> Map<'a, F, I, O> { 
123 | |   Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
124 | |  } 
125 | | } 
    | |_^ 
note: ...so that expression is assignable (expected combinator::Map<'a, _, _, _>, found combinator::Map<'_, _, _, _>) 
--> src\combinator\mod.rs:123:9 
    | 
123 |   Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
    |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
note: but, the lifetime must be valid for the anonymous lifetime #1 defined on the method body at 122:5... 
--> src\combinator\mod.rs:122:5 
    | 
122 |/ fn new(parser: &'a Parser, mapper: F) -> Map<'a, F, I, O> { 
123 | |   Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
124 | |  } 
    | |_____^ 
note: ...so that types are compatible (expected combinator::Parser<'_>, found combinator::Parser<'_>) 
--> src\combinator\mod.rs:123:15 
    | 
123 |   Map { parser, mapper, phantomDataI: PhantomData, phantomDataO: PhantomData } 
    |    ^^^^^^ 

が、私はこの行は

表現を発生している理由を理解していないですアサイン(予想コンビネータ::地図<「、 _、_ >、コンビネータ::マップを見つけました< '、_、_、_>)

どういう形で生涯指定子を変更する必要がありますか? newの署名で

答えて

1

Parser'a寿命パラメータを必要とします。

fn new(parser: &'a Parser<'a>, mapper: F) -> Map<'a, F, I, O> 
+0

すごいああ、どのように私はそれを逃しました。他のすべての関数が正しいです。どうもありがとう。 –

関連する問題