簡體   English   中英

Rust的結構如何保存和使用對象?

[英]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 }
}

在這里,新MyStructbuilder字段將設置為指定的表達式,所有其他字段將從self移出。 ..語法接受適當類型的任何表達式,而不僅僅是self 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM