rust - 为什么我的生命周期函数调用代码正常或失败?
问题描述
- 我是 Rust lang 的新手,想知道两个块之间有什么区别
fn main()
,谁能用一生的话来解释。 - 是 。
as_str()
调用改变 x 和 y 的生命周期? -> &a' str
指的是谁的一生?a,b,c 在lifetime()
返回位置还是 z 接收结果?
我认为变量 x 和 y 在两个块中具有相同的生命周期范围。z 的那个覆盖了 x 和 y。
如果(x: &'a str, y: &'a str, z: &'a str)
要求 x,y,z 的生命周期范围相同,则两个块都应该失败。
fn main()
{
let mut z = "123abc";
{//// CAN ONLY SUCCEED WHEN REMOVE THE BRACES OF THIS BLOCK
let x = String::from("ajoisd");
let y = String::from("aso");
z = lifetime(x.as_str(), y.as_str(), z);
}
{//// GOES WELL WITH/WITHOUT BRACES
let x = "ajoisd";
let y = "aso";
z = lifetime(x, y, z);
}
println!("{}", z);
}
fn lifetime<'a>(a: &'a str, b: &'a str, c: &'a str) -> &'a str
{
if a.len() > b.len() {a}
else if a.len() < b.len() {b}
else {c}
}
解决方案
字符串"ajoisd"
并"aso"
具有'static
生命周期。它们比程序中的任何变量都长。变量x
和y
在第一个块中只存在于这个块中,它的生命周期小于z
.
推荐阅读
- c - “塔计数”给出了正确的输出,但 CodeChef 说“错误的答案”,也许角落案例有问题,但我不知道
- git - “轻量级标签”可以指向树对象或 blob 对象吗?
- apache - Apache 调度程序规则不拒绝 /.json;%0aa.css
- sql - 如何在 1 个表中组合 2 个查询?
- javascript - JavaScript:从 Icons 渲染图标时出错 - Material Design
- php - 查询多个 WHERE 和 CASE PHP(CodeIgniter) MySQL
- git - 带有压缩档案的 Git
- python - 有没有办法让python请求通过用户输入来禁用ssl验证?
- git - 如何强制 git rebase 并覆盖合并冲突
- web2py - web2py 是否将“en”翻译成“en”