我正在尝试用rust制作一个flashcard程序,它将以json格式保存。我为每张卡片制作了以下结构:
#[derive(Serialize, Deserialize)]
struct Card{
question:String,
answer: String,
status: Status,
strength: f32,
stability: f32,
difficulty: f32,
review_history: Vec<Review>,
children: Vec<Card>,
parent: Box<Option<Card>>
}
在这个应用程序中,一张卡片可能与树结构中的另一张卡片相关,因此可以解释为什么有父变量和子向量。我了解到,如果一个结构指的是它自己,它必须在一个盒子或类似的东西中,在我的例子中,并不是每一张卡都有一个父卡,因为它可能是一个根,所以我还包括了选项。我在这方面没有错误。
但是,当我尝试像这样初始化根卡时,会出现一个错误:
let newcard = Card{
question: question,
answer: answer,
status: Status::Normal,
strength: 1f32,
stability: 1f32,
difficulty: 0.5f32,
review_history: review_history,
children: children,
parent: Box<None>,
};
我得到的错误是:在父框<无>线它建议使用Box:<无>但是我得到了一个错误“由于私有字段,构造函数不可见”。
我不确定哪些字段是私有的、my struct、box还是enum选项?
我还想知道为什么编译器不抱怨Vec<卡片>不是在一个盒子里,因为我刚刚学会了使用盒子来避免堆栈上的递归结构