V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaopanzi
V2EX  ›  Rust

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

  •  
  •   xiaopanzi · 2020-06-12 21:01:32 +08:00 · 4626 次点击
    这是一个创建于 1606 天前的主题,其中的信息可能已经有所发展或是发生改变。

    吐个槽:这是第 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

    6 条回复    2020-06-16 11:53:10 +08:00
    lance6716
        1
    lance6716  
       2020-06-12 21:45:03 +08:00 via Android
    rust 写链表还是到处 Copy 算了🤣
    billlee
        2
    billlee  
       2020-06-12 21:46:00 +08:00
    n 层嵌套的函数式代码,大概你需要一个有类型提示的 IDE?
    xiaopanzi
        3
    xiaopanzi  
    OP
       2020-06-12 22:08:08 +08:00
    @billlee 倒不是类型提示的问题。vscode 里面添加插件后就能显示类似。主要让我难受的地方是,我就想 peek 一下,竟然不能返回&,非得借助 Ref,把人搞晕了。如果从其他语言转过来,完整实现 doube linked list 的话,难度不小。
    lance6716
        4
    lance6716  
       2020-06-13 11:25:45 +08:00
    @xiaopanzi 这个博客挺有风趣的,而且讲的很详细,感谢分享
    fakeshadow
        5
    fakeshadow  
       2020-06-14 13:54:04 +08:00
    RefCell 的安全就是靠这个来保证的。Ref 里包了个引用计数,当 Ref 销毁的时候会通知 RefCell 引用-1 。所以你的引用不能比 Ref 命还长。
    我倒是觉得这类 Rust 教程的问题在于刻意回避 unsafe 的应用,链表这类问题用 unsafe 和裸指针会容易许多。
    sssooonnnggg
        6
    sssooonnnggg  
       2020-06-16 11:53:10 +08:00
    这种情况一般就用 unsafe 直接操作指针了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5523 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:36 · PVG 16:36 · LAX 00:36 · JFK 03:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.