为什么这一段 rust 报错?

129 天前
 leokun

大家好,我刚学习 rust ,写了这一段代码, 实在搞不懂 43 行为什么报错,有了解的可以解答一下吗? https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=62c840bcee6af986b1848054aeab66dc

1228 次点击
所在节点    Rust
5 条回复
wtl99
129 天前
```rust
loop {
BillMenu::show();
let _bill = BillMenu::get_input()
.map(|str| Some(str))
.map(|some_string| BillMenu::new(some_string.as_deref()))
.expect("获取错误,程序退出");
}
```
wtl99
129 天前
@wtl99 from gpt
这里的 str 是一个 String 类型,而 as_str() 返回的是一个 &str 引用。但是,str 是在闭包中拿到所有权的,而 as_str() 返回一个对 str 中数据的引用。当闭包结束时,str 将被释放,而引用将会无效,导致悬垂引用的问题。
feather12315
129 天前
str 得所有权转移了,后续没法继续运行了
leokun
128 天前
谢谢大家,已经解决了,原因是 get_input 中的 buffer 在函数执行完成后就已经 drop 了,
我的解决办法是在 get_input 外定义可变的 buffer ,然后在 buffer 里面借用 buffer ,这样 buffer 就不会清理了
leokun
128 天前
@leokun 打错,然后在 get_input 里面借用 buffer

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX