问题标签 [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.

0 投票
2 回答
840 浏览

rust - 我是否错误地实现了 IntoIterator 以引用 LazyList 实现,或者这是一个 Rust 错误?

在实现 LazyList 的一个版本(一个不可变的延迟计算的记忆单链表,就像 Haskell 列表一样)时,我遇到了一个实现问题IntoIterator,因为代码在我认为应该删除引用时没有删除引用。以下代码已被简化,只是为了说明问题;因此,它不是通用的,并且不包括与实施无关的所有方法IntoIterator

上面的代码失败了:

如 中的注释中main()所述,代码是可用的,除非通过 IntoIterator trait 作为引用调用。这可能是为引用实现特征的错误,其中包含指针的返回迭代器的所有权没有转移到与调用相同的范围,IntoIterator::into_iter而是转移到'static生命周期,因此,它不会在预期时被删除。

如果可能的话,我该如何实现?我尝试向结构添加一个std::marker::PhantomData<>标记字段,Iter但似乎也分配了一个'static生命周期。

0 投票
1 回答
382 浏览

rust - 限制 Rust 中的对象生命周期

我正在包装一个 C 库,它有一种标准的上下文对象:

然后使用它可以创建更多对象:

并摧毁它们:

所以我把它包装在 Rust 结构中:

所以现在我可以做到这一点,它似乎工作:

但是,我也可以这样做:

即库上下文在它创建的对象之前被销毁。

我可以以某种方式使用 Rust 的生命周期系统来防止上述代码编译吗?

0 投票
1 回答
94 浏览

rust - 直接调用函数时,可变引用的寿命足够长,但通过中间函数调用时,它的寿命不够长

对于以下 Rust 代码:

...编译器输出:

我不理解错误消息,因为我认为声明这些生命周期的目的是专门要求作为domain参数传递的任何对象都存在,只要Direction返回值中的引用依赖于分配的内存domain

的签名component_of_mut是:

...我可以直接在单元测试中调用它,而不会在编译期间出现生命周期错误。只有在facing_of_mut调用它时我才会收到错误。

0 投票
1 回答
524 浏览

oop - 为二叉树实现 IntoIterator

我正在尝试构建一个二叉树并编写一个迭代器来遍历树中的值。在为我的树节点实现 IntoIterator 特征时,我遇到了生命周期问题

我知道我需要指定 NodeIterator 将与 Node 一样长,但我不确定如何表达

0 投票
1 回答
2370 浏览

c# - DocumentDB 客户端生命周期

要访问 DocumentDB/CosmosDB,我使用的是包Microsoft.Azure.DocumentDB.Core(v1.3.2)。我在创建和初始化DocumentClient类时注意到:

向端点发出了许多请求以获取有关索引和其他信息的信息。确切地说,有 9 个 HTTP 请求发出.OpenAsync()。这使得客户端的创建和激活在性能方面成为一项非常昂贵的操作 - 最多需要一秒钟才能将所有请求带回家。

因此,为了减轻这种代价高昂的操作,我DocumentClient要做一个单例,并在应用程序的整个生命周期内保持引用。

应用程序是 Asp.Net Core MVC,这可能会将此对象的引用保留在内存中数天。

问题:可以将这个对象作为单例保持那么长时间吗?如果不是,应该采取什么策略来处理它?或者有没有办法使初始化更便宜(即不发出这些初始请求?)。

0 投票
0 回答
362 浏览

c# - autofac 单例初始化

我有一个这样的接口和类:

当我使用 autofac 并且我想将此类注册为单例时,我该怎么做。问题是用户凭据的值是在运行时从文件中读取凭据后确定的。

使用上面的代码,我在构建 UserCredentialProvider 时遇到异常,因为我认为我们在构建期间无法访问对象。有出路吗?

0 投票
1 回答
548 浏览

reference - 编写二叉搜索树时,参数类型“T”的寿命可能不够长

我正在尝试在 Rust 中编写二叉搜索树,但我不明白发生了什么:

当我尝试编译它时,我收到以下错误:

好吧,在做了很多研究并做了编译器建议的事情之后,我想出了这段代码:

但我仍然收到错误:

我知道这可以通过使用Boxes 而不是引用来解决,但我想让它像这样进行练习。

0 投票
0 回答
249 浏览

rust - 同时且可变地访问同一结构的不同字段

我正在尝试用 Rust 编写一个纸牌游戏,但在借用检查器上遇到了一些问题。我的主要structGame,看起来像这样

播放器类似于

为简单起见,我们可以假设,Card看起来像

现在我很自然地想从Game.deck

并将它们附加到玩家的手上

完整的游乐场示例

到目前为止,一切正常。开始游戏时,我想遍历所有玩家并让他们画起手:

完整的游乐场示例

这不起作用,因为self在迭代键时被借用,但必须可变地借用才能调用draw_to_player

我该如何解决这个问题?

0 投票
2 回答
1192 浏览

rust - 结构引用的 Rust 生命周期

我刚开始使用 Rust,但不能完全掌握生命周期,所以我可以自己解决以下问题:

这个测试项目是关于模拟一点,以允许通过各种按位操作对其进行跟踪,例如let newbit = oldbit1 ^ oldbit2,然后看newbit我可以告诉它来自一个 XOR 操作,其中oldbit1oldbit2作为操作数。

这可以编译,但我不完全理解为什么需要这样的生命周期参数。我假设编译器不能期望成员source_asource_b结构本身一样长,因为这可能不成立,因此需要明确的生命周期。

  • 这个假设正确吗?

此外,我不完全理解为什么我必须重新指定引用类型的生命周期参数,即为什么我必须写source_a: Option<&'a TraceBit<'a>>而不是source_a: Option<&'a TraceBit>.

  • 第二个生命周期是用来做什么的?我如何大声读出那句话?我有: "source_a 是一个类型的变量,Option它可能具有对"的实例的Some引用(至少与 struct 本身和 member 一样有效)source_bTraceBit

我的最后一个问题是我无法使用重载运算符使其工作:

这基本上是基于BitXor 文档的纯粹猜测。因此,我尝试以非常明确的方式对两个输入变量执行异或运算,并创建一个新TraceBit的作为输出,并将其中存储的输入作为参考。

  • 似乎没有什么比 xor 操作本身更长寿,但我该如何解决这个问题?

我已经尝试了各种解决方法/更改代码,但无济于事,无论如何我宁愿理解问题而不是猜测正确的解决方案......

0 投票
2 回答
6632 浏览

types - “盒子”是什么意思“生锈的意思?

Box<Fn() + Send + 'static>生锈是什么意思?

我在阅读高级类型章节时偶然发现了这种语法。Send是一个特征,但是对于类型参数化中的特征(在这种情况下)来说,这对+一生意味着什么?'static又是什么Fn()