E4175

E4175#

编译器诊断名称:as_not_trait_object

as 右侧不是 trait 对象类型。

MoonBit 使用 as &Trait 将值转换为 trait 对象。因此目标类型必须是 &Show 这样的 trait 对象类型,而不是普通的具体类型、类型参数或包类型。

错误示例#

fn invalid_cast() -> Unit {
  let _ = 1 as Int
}

Int 是具体类型,不是 trait 对象类型,因此不能用在 as 的右侧。

建议#

如果需要 trait 对象,请使用 as &Trait。如果只需要类型标注,请将期望类型写成标注,而不是使用 as

fn show_value() -> Unit {
  let value = 1 as &Show
  println(value)
}