|
|
|
@ -218,7 +218,7 @@ error[E0597]: `string2` does not live long enough
|
|
|
|
|
|
|
|
|
|
在`longest`函数中,`string2`的生命周期也是`'a`,由此说明`string2`也必须活到`println!`处, 可是`string2`在代码中实际上只能活到内部语句块的花括号处`}`,小于它应该具备的生命周期`'a`,因此编译出错。
|
|
|
|
|
|
|
|
|
|
作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`resuilt`没有引用`string2`,让我们这段代码通过。只能说,作为尊贵的人类,编译器的发明者,你高估了这个工具的能力,它真的做不到!而且Rust编译器在调教上是非常保守的:当可能出错也可能不出错时,它会选择前者,抛出编译错误。
|
|
|
|
|
作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`result`没有引用`string2`,让我们这段代码通过。只能说,作为尊贵的人类,编译器的发明者,你高估了这个工具的能力,它真的做不到!而且Rust编译器在调教上是非常保守的:当可能出错也可能不出错时,它会选择前者,抛出编译错误。
|
|
|
|
|
|
|
|
|
|
总之,显式的使用生命周期,可以让编译器正确的认识到多个引用之间的关系,最终帮我们提前规避可能存在的代码风险。
|
|
|
|
|
|
|
|
|
|