- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小库,可以导出带有生命周期注释的结构。现在我尝试从另一个程序使用它,但似乎我现在也需要在那里使用生命周期注释。基本上我是这样做的:
// in my lib
struct Foo<'a> {
baz: &'a str
}
// another program
struct Bar {
foo: Foo
}
其中说Bar
必须为 Foo
定义生命周期:
<anon>:6:10: 6:13 error: wrong number of lifetime parameters: expected 1, found 0 [E0107]
<anon>:6 foo: Foo
^~~
这很容易修复:
struct Bar<'a> {
foo: Foo<'a>
}
但这意味着我现在还必须为任何使用 Bar
的东西定义生命周期等等,对吗?如果这是真的,除了使用不需要显式生命周期的类型之外,还有什么办法可以解决这个问题吗?或者使用像 String
这样的自有类型会更好吗?无论如何?
一些背景知识,我使用了 &str
因为我不得不调用一个需要作为参数的函数。虽然转换它们没问题,但它实际上是一个 Vec<(&str, &str)>
,所以我的想法是首先通过使用正确的类型来摆脱转换。我觉得那是个错误的决定,但我知道什么……:)
最佳答案
是的,目前没有办法解决显式生命周期的冒泡问题。考虑它的方式是Foo
需要明确与哪个生命周期相关联,因为 baz
field 依赖于它,例如,编译器知道如果你试图使 Foo
停止你。比数据活得久baz
引用,或者这样您就可以拥有返回“与 baz 一样长寿”的引用的方法。如果您随后嵌入 Foo
进入Bar
, 现在 Bar
需要明确的生命周期,因为 Foo
取决于它。
如果Foo
是“拥有”字符串,意思是如果 Foo
应该能够独立于任何可能的生命周期(例如范围),那么它确实应该是 String
.从 String
转换切片的成本非常低,因为切片只是现有数据的一个 View 。
但是,如果您总是构建Foo
基于绑定(bind)到范围的现有数据(例如,传递给包含 Foo
实例的函数的字符串切片等)和 Foo
实例不需要超过现有数据的范围,那么如果您将其设为 String
您必须将切片转换为 String
(与相反的情况相比,这相对昂贵)只是在使用时将其转换回切片,在这种情况下,您应该将其保留为切片。您当然不应该仅仅为了避免必须键入显式生命周期而招致这种性能损失。
您会发现具有显式生命周期的类型非常普遍,所以虽然一开始它确实令人担忧,但您会习惯的。
关于rust - 生命周期注释,或 &str vs String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950970/
你信吗?我有一个这样的循环(请原谅任何错误,我不得不大量编辑大量信息和变量名称,相信我它有效)。 ...旧示例已删除,请参见下面的代码... 如果我将那些中间的 str = "Blah\(odat.c
我正在做一个本地测试来比较 C# 中 String 和 StringBuilder 的 Replace 操作性能,但是对于 String 我使用了以下代码: String str = "String
我想知道为什么str += "A"和 str = str + "A"有不同的表现。 在实践中, string str = "cool" for(int i = 0; i approximately
我有一个类型列表 [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)] 并想将其转换为 [('106.52.116.101', 1), ('45.
我有一个类型列表 [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)] 并想将其转换为 [('106.52.116.101', 1), ('45.
我正在遍历 HashMap并通过一些本地变量中的模式匹配将值放入其中。 委托(delegate)者 fn lyrics_no_bottles(song_template:&mut String){
如果字符串(短语)中只有元音,它(对我而言)说True;否则说 False。我不明白为什么它总是返回 False,因为 (x >= x) 总是返回 True。我感谢任何人检查此查询的解决方案。 (st
我有代码以某种方式转换字符串引用,例如取第一个字母 trait Tr { fn trim_indent(self) -> Self; } impl Tr for &'a str { f
我正在学习指针,这是我的代码。我定义了一个指向 char(实际上是字符串)的指针 *str 和一个指向 int *a 的指针,它们的定义方式相同。我认为 str 和 a 都应该是一个地址,但是当我试图
为什么我会收到错误消息?我已经正确添加了类型,对吗? Invalid index type "str" for "Union[str, Dict[str, str]]"; expected type
你知道下面两个函数是否等价吗? function validate(str) { return ( ['null','','undefined'].indexOf(str) [v, valida
我正在解决这里的 Dataquest 问题:https://app.dataquest.io/m/293/data-cleaning-basics/5/removing-non-digit-chara
我有一个字符串列表,如下所示: ["A TB", "A-R TB", "B TB", "B-R TB", "C TB", "C-R TB"...] 但字符串的顺序是随机的。我如何编写一个将元素配对的函
我正在尝试将此函数从使用 split 改为使用 str.extract (正则表达式)。 def bull_lev(x): spl = x.rsplit(None, 2)[-2].strip(
给定这样的数据结构: [{'a':1, 'b': 2}, {'c':3 }, {'a':4, 'c':9}, {'d':0}, {'d': 0, 'b':6}] 目标是解析数据以产生: {'a': 2
给定这样的数据结构: [{'a':1, 'b': 2}, {'c':3 }, {'a':4, 'c':9}, {'d':0}, {'d': 0, 'b':6}] 目标是解析数据以产生: {'a': 2
s = 'someString' s = QTreeWidgetItem(s) print(s.text(0)) # 0 being 'column' 输出: 's' 如果我对另一
黑白有什么区别: function(char* str ) function(char* str[] ) function(char str[] ) 它们是如何被调用的(通过什么类型的string/c
我试过谷歌搜索但找不到准确的答案,所以请允许我尝试在这里提问。如果问题看起来不合适,请告诉我,我会删除它。 在 JS 中,您可以通过三种不同的方式编写特定的内置功能: 字符串长度 str.toStri
我有这段代码(我的 strlen 函数) size_t slen(const char *str) { size_t len = 0; while (*str) {
我是一名优秀的程序员,十分优秀!