问题标签 [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 - 我是否错误地实现了 IntoIterator 以引用 LazyList 实现,或者这是一个 Rust 错误?
在实现 LazyList 的一个版本(一个不可变的延迟计算的记忆单链表,就像 Haskell 列表一样)时,我遇到了一个实现问题IntoIterator
,因为代码在我认为应该删除引用时没有删除引用。以下代码已被简化,只是为了说明问题;因此,它不是通用的,并且不包括与实施无关的所有方法IntoIterator
:
上面的代码失败了:
如 中的注释中main()
所述,代码是可用的,除非通过 IntoIterator trait 作为引用调用。这可能是为引用实现特征的错误,其中包含指针的返回迭代器的所有权没有转移到与调用相同的范围,IntoIterator::into_iter
而是转移到'static
生命周期,因此,它不会在预期时被删除。
如果可能的话,我该如何实现?我尝试向结构添加一个std::marker::PhantomData<>
标记字段,Iter
但似乎也分配了一个'static
生命周期。
rust - 限制 Rust 中的对象生命周期
我正在包装一个 C 库,它有一种标准的上下文对象:
然后使用它可以创建更多对象:
并摧毁它们:
所以我把它包装在 Rust 结构中:
所以现在我可以做到这一点,它似乎工作:
但是,我也可以这样做:
即库上下文在它创建的对象之前被销毁。
我可以以某种方式使用 Rust 的生命周期系统来防止上述代码编译吗?
rust - 直接调用函数时,可变引用的寿命足够长,但通过中间函数调用时,它的寿命不够长
对于以下 Rust 代码:
...编译器输出:
我不理解错误消息,因为我认为声明这些生命周期的目的是专门要求作为domain
参数传递的任何对象都存在,只要Direction
返回值中的引用依赖于分配的内存domain
。
的签名component_of_mut
是:
...我可以直接在单元测试中调用它,而不会在编译期间出现生命周期错误。只有在facing_of_mut
调用它时我才会收到错误。
oop - 为二叉树实现 IntoIterator
我正在尝试构建一个二叉树并编写一个迭代器来遍历树中的值。在为我的树节点实现 IntoIterator 特征时,我遇到了生命周期问题
我知道我需要指定 NodeIterator 将与 Node 一样长,但我不确定如何表达
c# - DocumentDB 客户端生命周期
要访问 DocumentDB/CosmosDB,我使用的是包Microsoft.Azure.DocumentDB.Core
(v1.3.2)。我在创建和初始化DocumentClient
类时注意到:
向端点发出了许多请求以获取有关索引和其他信息的信息。确切地说,有 9 个 HTTP 请求发出.OpenAsync()
。这使得客户端的创建和激活在性能方面成为一项非常昂贵的操作 - 最多需要一秒钟才能将所有请求带回家。
因此,为了减轻这种代价高昂的操作,我DocumentClient
要做一个单例,并在应用程序的整个生命周期内保持引用。
应用程序是 Asp.Net Core MVC,这可能会将此对象的引用保留在内存中数天。
问题:可以将这个对象作为单例保持那么长时间吗?如果不是,应该采取什么策略来处理它?或者有没有办法使初始化更便宜(即不发出这些初始请求?)。
c# - autofac 单例初始化
我有一个这样的接口和类:
当我使用 autofac 并且我想将此类注册为单例时,我该怎么做。问题是用户凭据的值是在运行时从文件中读取凭据后确定的。
使用上面的代码,我在构建 UserCredentialProvider 时遇到异常,因为我认为我们在构建期间无法访问对象。有出路吗?
reference - 编写二叉搜索树时,参数类型“T”的寿命可能不够长
我正在尝试在 Rust 中编写二叉搜索树,但我不明白发生了什么:
当我尝试编译它时,我收到以下错误:
好吧,在做了很多研究并做了编译器建议的事情之后,我想出了这段代码:
但我仍然收到错误:
我知道这可以通过使用Box
es 而不是引用来解决,但我想让它像这样进行练习。
rust - 结构引用的 Rust 生命周期
我刚开始使用 Rust,但不能完全掌握生命周期,所以我可以自己解决以下问题:
这个测试项目是关于模拟一点,以允许通过各种按位操作对其进行跟踪,例如let newbit = oldbit1 ^ oldbit2
,然后看newbit
我可以告诉它来自一个 XOR 操作,其中oldbit1
和oldbit2
作为操作数。
这可以编译,但我不完全理解为什么需要这样的生命周期参数。我假设编译器不能期望成员source_a
和source_b
结构本身一样长,因为这可能不成立,因此需要明确的生命周期。
- 这个假设正确吗?
此外,我不完全理解为什么我必须重新指定引用类型的生命周期参数,即为什么我必须写source_a: Option<&'a TraceBit<'a>>
而不是source_a: Option<&'a TraceBit>
.
- 第二个生命周期是用来做什么的?我如何大声读出那句话?我有: "
source_a
是一个类型的变量,Option
它可能具有对"的实例的Some
引用(至少与 struct 本身和 member 一样有效)source_b
TraceBit
我的最后一个问题是我无法使用重载运算符使其工作:
这基本上是基于BitXor 文档的纯粹猜测。因此,我尝试以非常明确的方式对两个输入变量执行异或运算,并创建一个新TraceBit
的作为输出,并将其中存储的输入作为参考。
- 似乎没有什么比 xor 操作本身更长寿,但我该如何解决这个问题?
我已经尝试了各种解决方法/更改代码,但无济于事,无论如何我宁愿理解问题而不是猜测正确的解决方案......
types - “盒子”是什么意思“生锈的意思?
Box<Fn() + Send + 'static>
生锈是什么意思?
我在阅读高级类型章节时偶然发现了这种语法。Send
是一个特征,但是对于类型参数化中的特征(在这种情况下)来说,这对+
一生意味着什么?'static
又是什么Fn()
?