这里有Rust的第一步。我搜索了一个答案,但找不到与最新版本有关的任何内容。
struct PG
{
names: &mut Vec<String> // line 12
}
impl PG
{
fn new() -> PG
{
PG { names: Vec::new() } // line 19
}
fn push(&self, s: String)
{
self.names.push(s);
}
}
fn main()
{
let pg = PG::new();
pg.push("John".to_string());
}
如果我编译上面的代码,我得到:
src/main.rs:12:12: 12:28 error: missing lifetime specifier [E0106]
src/main.rs:12 names: &mut Vec<String>
^~~~~~~~~~~~~~~~
如果我将names
的类型更改为&'static mut Vec<String>
,我会:
src/main.rs:19:21: 19:31 error: mismatched types:
expected `&'static mut collections::vec::Vec<collections::string::String>`,
found `collections::vec::Vec<_>`
(expected &-ptr,
found struct `collections::vec::Vec`) [E0308]
我知道我可以使用参数化生命周期,但由于其他原因,我必须使用static
。如何正确创建会员Vec?我在这里错过了什么?非常感谢你。
答案 0 :(得分:4)
您不需要任何生命周期或参考资料:
struct PG {
names: Vec<String>
}
impl PG {
fn new() -> PG {
PG { names: Vec::new() }
}
fn push(&mut self, s: String) {
self.names.push(s);
}
}
fn main() {
let mut pg = PG::new();
pg.push("John".to_string());
}
您的PG
struct 拥有向量 - 而不是对它的引用。这确实要求self
方法具有可变push
(因为您正在更改PG
!)。您还必须使pg
变量可变。