问题标签 [lifetime-scoping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 为什么不能编译具有两个非静态引用和一个静态引用的异步函数?
具有一个静态引用的异步函数编译:
具有非静态和静态引用的异步函数编译:
具有三个非静态引用的异步函数编译:
一个接受两个非静态引用和一个静态引用并返回未来编译的函数:
那么为什么一个带有两个非静态引用和一个静态引用的异步函数不能编译呢?
有问题的编译错误:
我目前的锈版本:
我在尝试将环摘要算法参数添加到已经有两个引用参数的函数时遇到了这个问题。解决方法非常简单,因为我可以将静态引用包装在一个结构中,将其传入,然后毫无问题地使用它。我只是好奇为什么会这样。
vector - 如何在 Rust 中将引用的生命周期移到范围之外
实际上,我尝试在 Rust 中实现以下功能。
我想要一个结构节点,它有一个指向其他节点结构的向量。此外,我有一个主向量,它保留所有已实例化的节点结构。
这里的关键点是节点是在循环内分配的(即自己的范围),并且保持所有结构(或对结构的引用)的主向量在循环外声明,在我看来这是一个 0815 用例。
经过大量尝试,我想出了仍然无法编译的代码。实际上我只用 &Node 和 RefCell<&Node> 尝试过,两者都不能编译。
我有点理解这个问题,但我想知道如何解决这个问题。如何在单独的范围内分配结构(此处为 for 循环),然后在 for 循环之外使用分配的结构。我的意思是在循环内分配结构并稍后在循环外使用它是一个常见的用例。
不知何故,我觉得缺少的链接是通过生命周期参数告诉 Rust 编译器,引用也应该在 for 循环之外保持活动状态,但我不知道该怎么做。但也许这也不是正确的方法......
实际上,这里的另一个关键点是我希望节点具有对其他节点的引用,而不是节点的副本。主向量也是如此,该向量应该具有对分配节点的引用,而不是节点的副本。