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
の署名で
すごいああ、どのように私はそれを逃しました。他のすべての関数が正しいです。どうもありがとう。 –