私はsimplecsに基づいてECSを作っています。エラーは `タプル変形と同じ名前にできません 'という意味ですか?
私はこのようになりますエンティティの構造体を生成するマクロを持っています。
($($name:ident : $component:ty,)*) => {
/// A collection of pointers to components
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct Entity {
$(
pub $name: Option<($component)>,
)*
children: Vec<Entity>
}
}
実体をシリアル化するためにserdeを使用するための私の目標ですが、どこのコンポーネントがすべきことは、醜いなし値の束を残しましたさあ。だから私はこのようになりますカスタム・シリアライザを実装しようとした:
impl Serialize for Entity {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer
{
let mut num_fields = 0;
$(
match self.$name {
Some => num_fields += 1,
None => {}
};
)*
let mut state = serializer.serialize_struct("Entity", num_fields)?;
// do serialize
state.end()
}
}
シリアライザはマクロ引数($name
)として指定された名前を経由してフィールドにアクセスしようとしますが、私はこれをコンパイルするに行くとき、私はこれを取得しますエラー
error[E0530]: match bindings cannot shadow tuple variants
|
| Some => {}
| ^^^^ cannot be named the same as a tuple variant
あなたは 'Some(pattern)'の代わりに 'Some'を使用しています。内容を気にしない場合は、一致を使う代わりにif条件で 'self。$ name.is_some()'を使います。 –