问题标签 [lazy-static]

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 回答
500 浏览

rust - 如何返回对互斥锁内的静态哈希图中的项目的引用?

我正在尝试访问静态哈希图以进行读取和写入,但我总是遇到错误:

但是我在 get 函数上遇到错误cannot return value referencing temporary value

我试过了.cloned().clone()甚至什么都没试过,但我没能让它工作。你能帮助我吗?

0 投票
3 回答
1572 浏览

mongodb - 替代使用带有lazy_static的'await'!生锈的宏?

我想在一个项目中使用 Async MongoDB。

不想绕过客户端,因为它需要绕过多个任务和线程。所以我使用惰性静态保持了一个静态客户端。但是我不能在初始化块中使用 await 。

我能做些什么来解决这个问题?

也欢迎提出在没有lazy_static 的情况下完全不同的建议。

0 投票
2 回答
551 浏览

rust - 在惰性静态 RwLock 中返回对 T 的引用>?

我有一个惰性静态结构,我希望能够在程序执行开始时将其设置为某个随机值,然后再获取。这个愚蠢的小片段可以用作示例:

此代码无法编译:

我知道您不能返回对临时值的引用。但我想返回一个ANSWER静态的引用——与临时相反!我想这是RwLockReadGuard第一次调用unwrap返回的问题吗?

我可以通过更改返回类型来编译代码:

但是现在调用代码变得非常不符合人体工程学 - 我必须进行两次额外调用才能获得实际值:

我可以以某种方式ANSWER从该函数返回对静态的引用吗?我RwLockReadGuard<&Answer>可以通过某种方式映射它来返回一个可能吗?

0 投票
2 回答
251 浏览

c++ - 将 Cpp 翻译成 Rust,处理全局静态对象

我是将熟悉的 Cpp 项目翻译成 Rust 的初学者。该项目包含一个名为 Globals 的类,它存储全局配置参数。以下是其 cpp 文件的摘录:

我如何将它翻译成 Rust?据我所知__get()实现了某种单例逻辑。我已经阅读了有关lazy_static crate 以实现类似的东西,但是每次我想读取它的值时解锁变量似乎太冗长了。是否可以在 cpp 代码中使用诸如Globals::get()之类的接口来实现这一点。

我很少发帖,所以如果我忘记了什么,请告诉我,我会提供详细信息。谢谢!

0 投票
2 回答
504 浏览

string - Rust 惰性静态自定义结构实例

在 Rust 中,我试图声明一个自定义结构的静态实例。

因为默认情况下我无法分配 const 以外的其他值,所以我尝试使用lazy_static。

这是我的自定义结构:

这是我尝试实例化它的方式:

此代码无法编译并出现以下错误:

我错过了什么?

0 投票
1 回答
636 浏览

rust - Rustlazy_static 变量 RwLock 访问

我正在尝试声明和读/写自定义结构的实例,lazy_static因为我必须在其初始化(字符串)时使用非常量函数。

正如我在另一个 Stackoverflow 帖子中看到,我尝试使用 RwLock,它在写入时工作正常,但在读取时失败,并出现以下错误:

0 投票
1 回答
1143 浏览

performance - Rust 中什么更好:定义一个静态变量以全局访问它或通过函数参数传递一个非静态变量?

如果一个变量在文件中的多个函数中使用,将其定义为静态而不是通过函数参数传递非静态变量会更好吗?这对性能有影响吗?

使用静态变量的示例:

使用普通变量的示例:

0 投票
1 回答
181 浏览

rust - 初始化函数在 `lazy_static` 块中被调用两次

我有一个大项目,我用它lazy_static来创建一个singleton. 我认为 crate 中存在错误lazy_static(仅出现在大型项目中)或者我做错了什么,因为必须调用一次才能创建单例的初始化函数被调用了两次。

项目结构如下



foo/foo-core/src/lib.rs

foo/foo-high/src/lib.rs

Foo/foo-core/Cargo.toml

Foo/foo-high/Cargo.toml

Foo/Cargo.toml

当我用 运行some_fun_test_runner测试时-- --no-capture,我看到 3 GETs 和 2 INITs 而INIT必须只打印一次。当我更改架构时,该函数被调用一次,但我需要这个架构。当我将foo::high::some_fun();(在 auto_fun 中)更改为 时super::super::layer::some_fun();,该函数也被调用了一次。我无法理解这种行为。我once_cell也用过,但我得到了相同的结果

0 投票
1 回答
1050 浏览

asynchronous - 在 tokio::select 中生锈 lazy_static 和 tokio::sync::mpsc::channel

我最近开始使用 rust 进行编码,我很喜欢它。我正在编写一个想要“包装”C-API 的项目。在一种情况下,我必须在 Rust 中定义 C 可以调用的回调。我让 bindgen 创建了回调。由于代码需要在某种程度上异步运行,因此我使用 tokio。

我想要达到的目标

我将 main 函数创建为 tokio::main。在主函数中,我创建了 2 个异步任务,一个监听通道,另一个触发 C-API 中的消息队列。如果消息可用,我想通过回调函数上的通道发送它们,这样我就可以在我正在侦听事件的任务上接收消息。稍后我想通过 SSE 或 GraphQL 订阅将这些消息发送给多个客户端。

我无法更改 C-Callbacks,因为它们需要传递给 C-API,并且我必须使用回调,否则我不会收到消息。

我的最新方法看起来像这样简化:

问题:

我了解该消息以及为什么会发生这种情况,但我想不出解决方案如何工作。

我有一个使用横梁通道的工作示例,但我宁愿使用来自 tokio 的异步通道,所以我没有那么多依赖项,一切都是异步的。

工作示例:

选择

一种我也没有开始工作的替代方法是使用某种本地函数或使用闭包。但我不确定这是否会起作用,即使如此。也许有人有一个想法。如果这样的东西可以工作,那就太好了,所以我不必使用lazy_static(我宁愿在我的代码中没有全局/静态变量)

这种方法的问题

如果有人能解决我的任何一个问题,那就太好了。如果这是一种全新的方法,那也很好。如果频道或 tokio 或其他任何方式不可行,那也没关系。主要是我用了tokio,因为一个crate我也在用tokio,所以我不必有更多的依赖。

已经谢谢你阅读到这里。

0 投票
1 回答
233 浏览

rust - 如何将 String 变量插入到全局可变 HashMap(使用lazy_static 和 Mutex)而不会导致“寿命不够长”的问题?

我正在使用 Rust,并且HashMap为了方便起见,我想使用全局变量。然而,虽然可以HashMap使用lazy_staticand定义一个全局的、可变的Mutex,但在我的函数中定义的变量很难String具有与 gloabl 相同的生命周期HashMap

我试过直接插入 &str 并且效果很好。有没有办法将字符串转换为纯值?

错误信息: