[英]How does Rust's struct hold and use a object?
我需要使用一個結構來保存serde_json對象,並在以后使用它。
extern crate serde_json;
use serde_json::builder::ObjectBuilder;
struct MyStruct {
builder: ObjectBuilder,
}
impl MyStruct {
fn new() -> MyStruct {
MyStruct { builder: ObjectBuilder::new() }
}
fn add_string_member(&self, name: &str, value: &str) {
self.builder.insert(name, value); //here compile error
}
}
fn main() {
let s = MyStruct::new();
s.add_string_member("name", "value");
}
但是我得到了錯誤
error: cannot move out of borrowed content [E0507]
ObjectBuilder
的方法self
。 由於您不能將某些內容移出借用的指針,因此簡單的解決方案是使MyStruct
上的方法也按值self
。
同樣, ObjectBuilder
的方法返回具有更改的新ObjectBuilder
。 您可以將該返回值包裝到新的MyStruct
,該MyStruct
可以從方法中返回。
extern crate serde_json;
use serde_json::builder::ObjectBuilder;
struct MyStruct {
builder: ObjectBuilder,
}
impl MyStruct {
fn new() -> MyStruct {
MyStruct { builder: ObjectBuilder::new() }
}
fn add_string_member(self, name: &str, value: &str) -> MyStruct {
MyStruct { builder: self.builder.insert(name, value) }
}
}
fn main() {
let s = MyStruct::new();
let s = s.add_string_member("name", "value");
}
如果MyStruct
還包含要繼續加入新MyStruct
其他成員,則可以使用快捷方式語法從現有實例初始化MyStruct
的其余字段:
fn add_string_member(self, name: &str, value: &str) -> MyStruct {
MyStruct { builder: self.builder.insert(name, value), ..self }
}
在這里,新MyStruct
的builder
字段將設置為指定的表達式,所有其他字段將從self
移出。 ( ..
語法接受適當類型的任何表達式,而不僅僅是self
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.