E4213#
Compiler diagnostic name: invalid_constr_self_type.
不能为 &Trait 这样的 trait 对象类型定义自定义构造器。
MoonBit 支持为用户定义的具体类型(包括结构体、枚举和 newtype)定义自定义构造器。trait 对象是经过类型擦除的运行时视图,并不是能拥有构造器的具体类型,因此 fn &Trait::Trait(...) 会被拒绝。
错误示例#
///|
pub(open) trait Renderable {
fn render(Self) -> String
}
///|
pub fn[X : Renderable] &Renderable::Renderable(value : X) -> &Renderable {
value as &Renderable
}
错误示例试图将 &Renderable::Renderable 用作 trait 对象类型的构造器。
建议#
使用普通函数将值转换为 trait 对象,或在具体的包装类型上定义自定义构造器。
///|
pub(open) trait Renderable {
fn render(Self) -> String
}
///|
pub fn[X : Renderable] as_renderable(value : X) -> &Renderable {
value as &Renderable
}