问题标签 [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 回答
73 浏览

perl - 当静态范围内没有任何变量时,我在 perl 中的行为如何?

这是第一个例子:

这是第一个示例的输出:

这是第二个例子:

这是第二个输出:

问题是:为什么在第二个示例sub Bsub C可以访问,my $x=2;而在第一个示例 sub1()中却sub2()不能访问,my $var=1; 我相信my用于静态范围$x,在示例 2 的静态范围内也没有任何其他内容sub big,我预计在第二个例子,像这样:In sub1 var=。在第二个例子中,can sub1and sub2can access to $xalough it has been declaration with word my,为什么它的行为不像第一个例子?

0 投票
2 回答
253 浏览

object-lifetime - Autofac:需要:在 AutofacModule 中处理的实例的生命周期结束事件

我使用 C# 和 Autofac 4.9.4。我有一个 Autofac 模块,它连接到 IComponentRegistration.Activated 事件。它查找某些类的激活实例并将它们注册到某个管理器类中。当然,此注册应限于受影响对象的生命周期。因此模块需要知道对象何时被容器丢弃,然后从管理器中注销它。否则我会产生内存泄漏。当我向 autofac ContainerBuilder 注册一个类时,有一个 OnRelease-Method,但这不是正确的地方;我需要模块内的这样一个事件。

具体代码如下所示:

当一个物体被丢弃时,我怎样才能引起注意?

0 投票
1 回答
483 浏览

rust - 在 Rust 中,如何将具有生命周期的对象推送到向量中?

我的代码有点像下面,它尝试从 websocket 中读取数据,将 JSON 结果解析为结构,然后将该结构推送到Vec缓冲区中。然而,代码无法编译,因为结构有生命周期,并且借用检查器抱怨 JSON 字符串的生命周期不够长。

确切的错误是borrowed value [&resp_raw] does not live long enough.

我想知道我应该如何重构这段代码以满足借用检查器;将具有生命周期的结构推送到Vec参数上的正确方法是什么?

还是&'a str解析成MyType实际上仍然保留对原始 JSON 字符串的引用,所以没有办法安全地做到这一点?

0 投票
2 回答
591 浏览

c# - Autofac:仅使用已解析的实例处理对象实例及其依赖项?

假设我有一个对象的实例,由 Autofac 解析,如下所示:

现在我只有myService. 是否有任何 Autofac API 接收我的变量myService并将其处理掉(连同 Autofac 解决的所有依赖项)?

例如

需要注意的几点:

  1. 我当然不能自己做myService.Dispose(),因为这不会处理 Autofac 注入的子依赖项(因为 Autofac 正在控制它们的生命周期)。
  2. 我只有myService和我在一起。这是我正在处理的图书馆的特殊性质。我当然可以scope自己存储变量并管理它。那将是我最后的手段。只是想知道 Autofac 是否内置了一些东西。
0 投票
1 回答
593 浏览

rust - 为什么 Rayon 不需要 Arc<_>?

Programming Rust的第 465 页上,您可以找到代码和解释(重点由我添加)

我们更改了词汇表的类型:要并行运行分析,调用者必须传入一个,一个指向已移动到堆中的Arc<GigabyteMap>a 的智能指针,方法是。当我们调用glossary.clone() 时,我们正在制作智能指针的副本,而不是整个. 这相当于增加引用计数。通过此更改,程序可以编译并运行,因为它不再依赖于引用生命周期。只要任何线程拥有一个,它就会使地图保持活动状态,即使父线程提前退出。不会有任何数据竞争,因为 an 中的数据是不可变的。GigabyteMapArc::new(giga_map)ArcGigabyteMapArc<GigabyteMap>Arc

在下一节中,他们展示了用 Rayon 重写的内容,

您可以在重写为使用 Rayon 的部分中看到它接受&GigabyteMap而不是Arc<GigabyteMap>. 他们没有解释这是如何工作的。为什么人造丝不需要Arc<GigabyteMap>?Rayon 是如何接受直接推荐的?

0 投票
1 回答
80 浏览

rust - 结构中的 Rust 生命周期范围

所以,我正在努力将我用 Python 编写的字符串标记器移植到 Rust,我遇到了一个我似乎无法解决生命周期和结构的问题。

所以,这个过程基本上是:

  1. 获取文件数组
  2. 将每个文件转换为一个Vec<String>令牌
  3. 用户 aCounterUnicase从每个用户中获取令牌的单个实例的计数vec
  4. 将该计数与其他一些数据一起保存在结构中
  5. (未来)对结构集进行一些处理,以在每个文件数据旁边累积总数据

但是,当我尝试返回CorpusPart时,它抱怨它正在尝试引用局部变量tokens。我该如何/应该如何处理这个问题?我尝试添加生命周期注释,但无法弄清楚......

本质上,我不再需要s Vec<String>,但我确实需要其中一些String用于柜台的 s。

任何帮助表示赞赏,谢谢!

0 投票
1 回答
785 浏览

c# - 应用程序生命周期和在 ASP.NET Core 中添加单例 DI 服务

我试图了解 ASP.NET Core 中 DI 上下文中的单例生命周期。

首先,据我所见,Singleton 实例将在“整个应用程序生命周期”中可用。但是“应用程序生命周期”是什么意思?如果它是一个网站并且如果用户登录,则首先创建单例,然后用户注销并在几个小时后返回该站点并重新登录该用户会获得相同的单例实例吗?多用户呢?多个用户可以获取相同的单例实例吗?

其次,.NET Core 中的应用程序生命周期何时结束?大多数文章都在讨论注册应用程序关闭事件。但是什么会触发应用程序关闭?它总是像 IISreset 或系统关闭这样的外部事件吗?还是内存崩溃等内部事件?如果没有重置或内存或任何其他问题,它会永远持续下去吗?

0 投票
0 回答
85 浏览

rust - 我怎样才能避免给已经有明确生命周期的东西一个静态生命周期?

我正在构建一个 Rust 库,它向 C++ 客户端应用程序公开以下简单流程:

  1. 客户端应用程序 (CA) 调用 API 来创建 FooClient,其中包括创建 tokio::Runtime。
  2. CA 调用 FooClient.lookup(" http://stackoverflow.com ", callback) ,其中 callback 是一个函数指针。
  3. FooClient 获取 URI 并将其复制到 Context 结构中。上下文结构具有对 FooClient 的 tokio::Runtime 的引用等。此上下文通过业务逻辑的几个功能传递。上下文的显式生命周期为'a,因此它比 短'static
  4. 当繁重的处理完成后,Rust 调用它给出的回调(这被转换为 FnOnce 并且工作正常)

在第 3 步的业务逻辑中,通常需要发出一个 Web 请求,我想使用&tokio::Runtime存储在 Context 中的异步调度该请求。

这是简化的代码,无法编译:

这给我的错误是:

它实际上为 spawn 中使用的每个参数抛出此错误,而不仅仅是上下文。但是,我不认为'static就在这里。我认为如果有的话,它应该是 ' a,这与我的上下文的显式生命周期相关联。

我可以做某种形式的解决方法吗?也许与Arc<Mutex<Context>>,虽然这似乎也不能正确地做我想要的。

0 投票
0 回答
119 浏览

rust - 在 Rust 中,我有大量我想管理的接收器对象,但是我在使用 Select 时遇到了生命周期问题

由于存在大量对象的可能性,我想有一种方法将它们添加到选择列表中,删除它们进行处理,然后将它们添加回来。全部,无需在每次将对象添加回来等待时重新构建选择列表。它看起来像这样:

随着时间的推移,选择列表将包含更多的死条目,然后是活的,我会在那个时候重建它。但是,我不想每次都重建它。这是详细的错误消息:

虽然我相信我理解这个问题,从哈希表中借用接收器的时间不够长,但我很难想出一个替代方案——而且我没有看到一个干净的方法借资料。我考虑创建一个结构来包含借用,并在等待 sel_index 中使用它而不是普通的 id,但这会遇到相同的生命周期问题。

我觉得我错过了一些东西或不理解一些东西,因为看起来做我想做的事情不应该那么难。我可以想象选择 HashMap 来保存对象可能是问题所在,因为我正在添加和插入,所以 Vec 感觉不对。顺便说一句,HashMap 通常不属于候补名单。它是其他东西的一部分,但无论 HashMap 位于何处,问题仍然存在。

0 投票
1 回答
360 浏览

rust - 为什么当我将值移动到衍生的 Tokio 任务中时,Rust 的生命周期很重要?

我正在尝试创建一个结构来管理 Tokio 任务,其中一个tokio::sync::mpsc::Sender向任务发送输入,一个tokio::sync::mpsc::Receiver从任务接收输出,以及一个我可以在最后加入的句柄。

当我尝试编译它时,我得到了这个错误,B而其他两个类型参数也出现了类似的错误:

我很难理解生命周期的问题所在。我理解它的方式,生命周期问题通常来自寿命不够长的引用,但我正在移动值,而不是使用引用。我将b, rx_input, and移动tx_output到闭包中,并将tx_input, rx_output, and保留handle在调用范围内。有谁知道在这种情况下如何满足编译器?