Rust 的智能指针太反人类的!

2020-06-12 21:01:32 +08:00
 xiaopanzi

吐个槽:这是第 3 次学习 Rust 。之前都是到了智能指针那里停住了,这次又是遇到智能指针有点晕乎乎的。是它设计得太反人类,还是我太蠢了?

放一段让我今晚缺氧的代码:

pub fn peek_front(&self) -> Option<Ref<T>> {
    self.head.as_ref().map(|node| {
        Ref::map(node.borrow(), |node| &node.elem)
    })
}

来自Too Many Lists

4498 次点击
所在节点    Rust
6 条回复
lance6716
2020-06-12 21:45:03 +08:00
rust 写链表还是到处 Copy 算了🤣
billlee
2020-06-12 21:46:00 +08:00
n 层嵌套的函数式代码,大概你需要一个有类型提示的 IDE?
xiaopanzi
2020-06-12 22:08:08 +08:00
@billlee 倒不是类型提示的问题。vscode 里面添加插件后就能显示类似。主要让我难受的地方是,我就想 peek 一下,竟然不能返回&,非得借助 Ref,把人搞晕了。如果从其他语言转过来,完整实现 doube linked list 的话,难度不小。
lance6716
2020-06-13 11:25:45 +08:00
@xiaopanzi 这个博客挺有风趣的,而且讲的很详细,感谢分享
fakeshadow
2020-06-14 13:54:04 +08:00
RefCell 的安全就是靠这个来保证的。Ref 里包了个引用计数,当 Ref 销毁的时候会通知 RefCell 引用-1 。所以你的引用不能比 Ref 命还长。
我倒是觉得这类 Rust 教程的问题在于刻意回避 unsafe 的应用,链表这类问题用 unsafe 和裸指针会容易许多。
sssooonnnggg
2020-06-16 11:53:10 +08:00
这种情况一般就用 unsafe 直接操作指针了

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

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

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

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

© 2021 V2EX