E0106
该错误表明类型中缺少生命周期。如果是函数签名中的错误,问题可能是没有遵守生命周期省略规则(见下方)。
错误代码示例:
struct Foo1 { x: &bool }
// ^ 需要生命周期参数
struct Foo2<'a> { x: &'a bool } // 正确
struct Bar1 { x: Foo2 }
// ^^^^ 需要生命周期参数
struct Bar2<'a> { x: Foo2<'a> } // 正确
enum Baz1 { A(u8), B(&bool), }
// ^ 需要生命周期参数
enum Baz2<'a> { A(u8), B(&'a bool), } // 正确
type MyStr1 = &str;
// ^ 需要生命周期参数
type MyStr2<'a> = &'a str; // 正确
生命周期省略是一种函数签名生命周期的特殊的,有限制的推断,允许您在某些情况下省略生命周期。更多生命周期省略信息请参阅 the book.
生命周期省略规则要求任何具有省略输出生命周期的函数签名必须具有以下:
- 恰好只有一个输入生命周期
- 或者,多个输入生命周期,但是该函数必须也同时是接收
&self
或&mut self
(参数)的方法。
在第一种情况下,输出生命周期被推断为与唯一输入生命周期相同。在第二种情况下,生命周期被推断为与 &self
或 &mut self
上的相同。
此处有一些省略错误的例子:
// error,没有输入生命周期
fn foo() -> &str { }
// error, `x` and `y` 具有不同的生命周期推断
fn bar(x: &str, y: &str) -> &str { }
// error, `y` 的生命周期推断为与 `x` 的不同
fn baz<'a>(x: &'a str, y: &str) -> &str { }
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。