我正在尝试用 Rust 制作一棵带有父指针的树。节点结构上的方法给我带来了生命周期问题。这是一个最小的例子,明确地写出了生命周期,以便我可以理解它们:
\n\nuse 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}\nRun Code Online (Sandbox Code Playgroud)\n\n(游乐场链接)
\n\nRust 抱怨child...
\n\n\n\n
\'n错误[E0495]:由于要求冲突,无法推断生命周期参数的适当生命周期
...但是没关系transmuted_child。
我想我明白为什么child无法编译:self参数的类型是,&\'a mut LogNode<\'n>但子节点包含一个&\'a mut LogNode<\'a>,并且 Rust 不想强制LogNode<\'n>为 …