E4130#
derive 不允许为类型别名派生特征。
类型的别名可以与类型本身互换使用,因此不可能为别名派生特征而不为其别名的类型派生特征。因此,MoonBit 不允许为类型别名派生特征。相反,应该为类型本身派生特征。
错误示例#
pub struct MyStruct {
field : Int
}
pub type StructAlias = MyStruct derive(Debug)
建议#
将 derive 属性移动到类型本身:
pub struct MyStruct {
field : Int
} derive(Debug)
pub type StructAlias = MyStruct
pub fn make_alias() -> StructAlias {
{ field: 1 }
}
如果你没有控制类型,你可以创建一个新类型,它包装原始类型。然而,为新类型派生特征需要被包装类型也实现特征,这通常不是使用类型别名的情况。在这种情况下,您需要手动实现特征。
pub struct StructWrapper(MyStruct)
pub fn wrap(value : MyStruct) -> StructWrapper {
StructWrapper(value)
}