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`,因此编译出错。
作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`resuilt`没有引用`string2`让我们这段代码通过。只能说作为尊贵的人类编译器的发明者你高估了这个工具的能力它真的做不到而且Rust编译器在调教上是非常保守的当可能出错也可能不出错时它会选择前者抛出编译错误。
作为人类,我们可以很清晰的看出`result`实际上引用了`string1`,因为`string1`的长度明显要比`string2`长,既然如此,编译器不该如此矫情才对,它应该能认识到`result`没有引用`string2`让我们这段代码通过。只能说作为尊贵的人类编译器的发明者你高估了这个工具的能力它真的做不到而且Rust编译器在调教上是非常保守的当可能出错也可能不出错时它会选择前者抛出编译错误。
总之,显式的使用生命周期,可以让编译器正确的认识到多个引用之间的关系,最终帮我们提前规避可能存在的代码风险。

Loading…
Cancel
Save