所以我目前难以struct通过将Yaml文件加载到堆内存来初始化:
extern crate yaml_rust;
use std::io::prelude::*;
use std::fs;
use yaml_rust::{Yaml, YamlLoader};
struct Petrovich {
middlename: Yaml,
firstname: Yaml,
lastname: Yaml
}
impl Petrovich {
fn new() -> Petrovich {
// Open Rules File (Panics on error)
let mut f = fs::File::open("./src/rules.yml").unwrap();
// Create String Buffer and Read to it
let mut buffer = String::new();
f.read_to_string(&mut buffer).unwrap();
// Pass Buffer to Yaml and unwrap
let rules: &Yaml = &YamlLoader::load_from_str(&buffer).unwrap()[0];
// Return Petrovich with preloaded rules
Petrovich {
middlename: rules["middlename"],
firstname: rules["firstname"],
lastname: rules["lastname"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到一个cannot move out of indexed content错误.我该如何解决这个问题?
编辑:我使用yaml-rust了这一点,并有一个文件rules.yml用firstname,lastname和middlename领域内,包括./src
来源可以在这里找到:https://github.com/Latrasis/petrovich-rs
Yaml是Clone,因此您可以简单地在引用上调用 .clone() 来将其内容复制“出来”:
Petrovich {
middlename: rules["middlename"].clone(),
firstname: rules["firstname"].clone(),
lastname: rules["lastname"].clone(),
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个而不是公认的解决方案,因为复制的数据很小并且它不依赖于yaml::Hash. 克隆整个文档树可能是另一回事。
您可能会在这里争论是否要向 yaml-rust 添加某个功能。将元素移出树似乎是一个合理的请求,但 API 并不直接支持它。
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |