E4130#
derive
不允许为类型别名派生特征。
类型的别名可以与类型本身互换使用,因此不可能为别名派生特征而不为其别名的类型派生特征。因此,MoonBit 不允许为类型别名派生特征。相反,应该为类型本身派生特征。
错误示例#
struct MyStruct {
field: Int
}
typealias StructAlias = MyStruct derive(Show) // Error: `derive` is not allowed for type alias
建议#
将 derive
属性移动到类型本身:
struct MyStruct {
field: Int
} derive(Show)
typealias StructAlias = MyStruct // Remove `derive`
如果你没有控制类型,你可以创建一个新类型,它包装原始类型。然而,为新类型派生特征需要被包装类型也实现特征,这通常不是使用类型别名的情况。在这种情况下,您需要手动实现特征。
type StructWrapper MyStruct
impl Show for StructWrapper with output(self, logger) {
...
}