吐个槽:这是第 3 次学习 Rust 。之前都是到了智能指针那里停住了,这次又是遇到智能指针有点晕乎乎的。是它设计得太反人类,还是我太蠢了?
放一段让我今晚缺氧的代码:
pub fn peek_front(&self) -> Option<Ref<T>> {
self.head.as_ref().map(|node| {
Ref::map(node.borrow(), |node| &node.elem)
})
}
1
lance6716 2020-06-12 21:45:03 +08:00 via Android
rust 写链表还是到处 Copy 算了🤣
|
2
billlee 2020-06-12 21:46:00 +08:00
n 层嵌套的函数式代码,大概你需要一个有类型提示的 IDE?
|
3
xiaopanzi OP @billlee 倒不是类型提示的问题。vscode 里面添加插件后就能显示类似。主要让我难受的地方是,我就想 peek 一下,竟然不能返回&,非得借助 Ref,把人搞晕了。如果从其他语言转过来,完整实现 doube linked list 的话,难度不小。
|
5
fakeshadow 2020-06-14 13:54:04 +08:00
RefCell 的安全就是靠这个来保证的。Ref 里包了个引用计数,当 Ref 销毁的时候会通知 RefCell 引用-1 。所以你的引用不能比 Ref 命还长。
我倒是觉得这类 Rust 教程的问题在于刻意回避 unsafe 的应用,链表这类问题用 unsafe 和裸指针会容易许多。 |
6
sssooonnnggg 2020-06-16 11:53:10 +08:00
这种情况一般就用 unsafe 直接操作指针了
|