pull/155/head
sunface 3 years ago
commit 55d9b0cd95

@ -218,7 +218,7 @@ error[E0597]: `string2` does not live long enough
在`longest`函数中,`string2`的生命周期也是`'a`,由此说明`string2`也必须活到`println!`处, 可是`string2`在代码中实际上只能活到内部语句块的花括号处`}`,小于它应该具备的生命周期`'a`,因此编译出错。 在`longest`函数中,`string2`的生命周期也是`'a`,由此说明`string2`也必须活到`println!`处, 可是`string2`在代码中实际上只能活到内部语句块的花括号处`}`,小于它应该具备的生命周期`'a`,因此编译出错。
作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`resuilt`没有引用`string2`让我们这段代码通过。只能说作为尊贵的人类编译器的发明者你高估了这个工具的能力它真的做不到而且Rust编译器在调教上是非常保守的当可能出错也可能不出错时它会选择前者抛出编译错误。 作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`result`没有引用`string2`让我们这段代码通过。只能说作为尊贵的人类编译器的发明者你高估了这个工具的能力它真的做不到而且Rust编译器在调教上是非常保守的当可能出错也可能不出错时它会选择前者抛出编译错误。
总之,显式的使用生命周期,可以让编译器正确的认识到多个引用之间的关系,最终帮我们提前规避可能存在的代码风险。 总之,显式的使用生命周期,可以让编译器正确的认识到多个引用之间的关系,最终帮我们提前规避可能存在的代码风险。
@ -583,4 +583,4 @@ where
从本章开始最大的收获就是可以在结构体中使用引用类型了说实话为了引入这个特性我已经憋了足足30章节。。 从本章开始最大的收获就是可以在结构体中使用引用类型了说实话为了引入这个特性我已经憋了足足30章节。。
但是还没完是的就算是将近2万字生命周期的旅程依然没有完结下一节将介绍一些关于生命周期的高级特性这些特性你在其它中文书中目前还看不到的。 但是还没完是的就算是将近2万字生命周期的旅程依然没有完结下一节将介绍一些关于生命周期的高级特性这些特性你在其它中文书中目前还看不到的。

Loading…
Cancel
Save