问题标签 [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 - 将两个对象传递给线程
免责声明:这个问题非常接近将两个对象传递给线程,其中一个对象持有另一个对象的引用,但不相等。
我有一个 C 库,我调用它来获取指向结构的指针,然后*mut ffi_context
返回。然后我将该指针包装成这样的 rust 结构:
并实现一个合适的Drop
方法来释放*mut ffi_context
.
然后我可以使用该上下文来获取更多的结构(*mut ffi_context_dependant
),这些结构不能超过上下文。我查阅了 nomicon,并在我的 MyContextDependant 结构中添加了一个 PhantomData,所以如果我违反了生命周期要求,rustc 会对我大喊:
现在我希望类型为Send
-y。C 库声明可以使用来自另一个线程的结构,但不能同时使用。这很好,因为这意味着我可以Send
为这些结构实现:
- 只要没有 &mut (并行阅读不会造成伤害),我就可以将 &s 传递给任何人(假设生命周期成立)
- 我可以将 &mut 传递给一个,当且仅当没有 &s 被持有
- 除非我证明上下文存在足够长的时间,否则我不能将依赖项移动到线程
但是,它禁止我移动上下文和所有依赖项,这将(实际上)是完全安全的,只要我强制移动的目的地使上下文超过所有依赖项。
有没有一种理智的方法可以用 rust 来表达这一点?我是否必须编写(不安全的)辅助函数来解构我的 rust 类型、移动原始指针并重建具有适当生命周期的 rust 类型?
javascript - 包装 Redux 的 API 以使存储实例是瞬态的而不是单例的最佳方式是什么?
我还没有深入了解源代码或其他任何东西,但只是好奇过去是否有人需要或使用过它。
似乎 Redux 正在为商店创建一个单例实例,并在调用者的生命周期内将其持久化,但这对于我们正在考虑实现的内容并不真正站得住脚……如果存在,最简单的方法是什么,用于扩展他们的 API 并创建具有范围生命周期的商店?
这是在纯服务器端应用程序中使用 Redux 的情况下(或至少据它所知等)
编辑:
同样,虽然您可以通过直接导入来引用您的商店实例,但这不是 Redux 中推荐的模式。如果您创建一个商店实例并从一个模块中导出它,它将成为一个单例。这意味着将 Redux 应用程序隔离为更大应用程序的组件(如果有必要)或启用服务器渲染将更加困难,因为您希望在服务器上为每个请求创建单独的存储实例。
我在这里的文档中找到了这段摘录。
这个输出考虑的模块在实践中是如何工作的?如果我仅通过外部公开的方法在给定的生命周期内声明它的范围内访问商店,我是否应该期望在某个指定的应用程序生命周期内关闭范围时释放实例?
generics - 为什么在生命周期参数中使用“通用”一词?
当我们写:
为什么我们不将'a
s 和'b
s 称为生命周期参数而不是通用生命周期参数?这只是一种语法方式,可以根据参数的生命周期向编译器传达对返回引用的生命周期的约束。我正在努力寻找在此处包含“通用”一词的理由。
generics - 具有生命周期参数的结果 - 具有生命周期参数的枚举应用于默认 T<'a> 和 E<'a> 参数 (Rust)
我正在尝试使用生命周期参数来制作 a ,作为对( ) 和( ) 泛型参数Result
的额外限制。T
::Ok(T)
E
::Err(E)
unused parameter, suggestion: add PhantomData
所以它没有用。我读到我可以用 破解未使用的参数错误PhantomData
,但这对我来说似乎很脏。
这也没有工作:
undefined parameter, suggestion: add parameter before T
(twice)
这个建议让我陷入了循环!
如何在我的泛型参数默认值中放置一个type
具有生命周期参数的泛型?enum
rust - Rust 中 flatbuffers 表的“类型不满足所需的生命周期”
我有一些平面缓冲区 IDL:
生成以下.rs:
我正在尝试为其添加一些特征 impl:
我得到以下信息:
如果我添加生命周期:
我得到以下信息:
我不确定我明白这是什么意思。如果我理解正确,我需要标记as_any
生活时间不超过crate::schema_generated::Filter
,对吗?
有什么线索吗?需求从何'static
而来?
PS。我找到了以下内容,但我不确定它是否相关。
rust - 如何在 Rust 中使用生命周期参数迭代结构列表?
我有以下生成的代码(来自 flatbuffers 模式):
我有自己的 struct 拥有它:
当尝试对其进行迭代时,我有以下错误输出:
为什么编译器不清楚它是否会存活在'a
这里似乎没问题?我该如何解决?
PS。这是生成代码的 flatbuffers IDL:
聚苯乙烯。我发现只有在从 flatbuffers 集合(each_match_result.blocking_filters()
或)迭代另一个向量并将其添加到放入each_match_result.allowing_filters()
的新过滤器向量中时才会发生这种情况:filters
filter_by_keyword
这是其他集合的声明方式:
rust - 找不到正确的生命周期参数来存储加载的字体
所以我正在用 rust 构建一个游戏引擎,但是我在找到正确的生命周期参数/语法来存储 sdl2 库渲染所需的字体数据时遇到了问题。
这是我目前正在做的简化版本,但它不能编译。据我所知,由Font
给出的对象的第一个生命周期参数ttf.load_font()
必须与ttf
对象本身的生命周期相匹配,但我无法提出正确的语法或数据结构来告诉编译器该生命周期关系。
我目前的理解是,作为数据成员,它ttf
具有相同(或更短)的生命周期,并且创建的任何对象都将具有与创建它的对象相关联的生命周期。所以in FontManager 应该是相同的生命周期。显然我在这里缺少一些东西,因为它不太有效,但我不确定它是什么。如果有人可以帮助解释发生了什么,我将不胜感激。FontManager
Font
ttf
<'a>
c# - 不确定我是否正在创建正确的生命周期范围
我的 Specflow 步骤之一是尝试使用一种将 AutofacILifetimeScope
作为参数的方法。这是该步骤尝试调用的方法:
我没有在我的 Specflow 应用程序中使用 Autofac,所以不确定我ILifetimeScope
是否正确创建。
我将此添加到我的构造函数中,但不确定这是否正确,但我的客户端实例似乎没有正确创建。
有人可以建议我在这里可能需要做什么吗?
rust - 类型相同时,Rust 中的“一种类型比另一种更通用”错误
我有以下代码
此外,您可以在Rust Playground上在线运行它。
出现以下错误:
现在,这真的很奇怪,因为它清楚地表明它正在得到它所期望的。我不明白哪种类型比哪种更通用。我对生命周期的了解不足以调试此代码。有人可以对此有更多的了解吗?