下面的代码只有在我包含标有"?"的行时才能编译.如果我删除该行,我会收到很多关于参数"S"从未使用过的错误信息.我在一个更大的场景中偶然发现了这个"问题",并很难把它固定下来.据我所知,这是由于类型之间的循环引用造成的.
struct Question<S> {
x: Vec<AnswerRef<S>>,
_y: PhantomData<S> // ???
}
struct QuestionRef<S>(Rc<Question<S>>);
struct Answer<S> {
x: Option<QuestionRef<S>>
}
struct AnswerRef<S>(Rc<Answer<S>>);
把PhantomData
加起来就解决了问题,但我不明白为什么.我不明白在这种情况下这有什么不同.有人能给我解释一下吗?