小编ash*_*eoi的帖子

即使存在“&mut T”,我是否可以将生命周期参数强制缩短(合理地)?

我正在尝试用 Rust 制作一棵带有父指针的树。节点结构上的方法给我带来了生命周期问题。这是一个最小的例子,明确地写出了生命周期,以便我可以理解它们:

\n\n
use core::mem::transmute;\n\npub struct LogNode<\'n>(Option<&\'n mut LogNode<\'n>>);\n\nimpl<\'n> LogNode<\'n> {\n    pub fn child<\'a>(self: &\'a mut LogNode<\'n>) -> LogNode<\'a> {\n        LogNode(Some(self))\n    }\n\n    pub fn transmuted_child<\'a>(self: &\'a mut LogNode<\'n>) -> LogNode<\'a> {\n        unsafe {\n            LogNode(Some(\n                transmute::<&\'a mut LogNode<\'n>, &\'a mut LogNode<\'a>>(self)\n            ))\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

游乐场链接

\n\n

Rust 抱怨child...

\n\n
\n

\'n错误[E0495]:由于要求冲突,无法推断生命周期参数的适当生命周期

\n
\n\n

...但是没关系transmuted_child

\n\n

我想我明白为什么child无法编译:self参数的类型是,&\'a mut LogNode<\'n>但子节点包含一个&\'a mut LogNode<\'a>,并且 Rust 不想强制LogNode<\'n>为 …

lifetime rust

4
推荐指数
2
解决办法
1424
查看次数

标签 统计

lifetime ×1

rust ×1