E4161

E4161#

编译器诊断名称:mismatch_with_declare

声明与其实现不匹配。

declare 条目与实现它的条目描述了不同的 API 时,会出现此错误。MoonBit 会将声明与实现进行检查,避免前向声明、抽象类型声明或已声明的实现关系悄悄偏离实际定义。

对于函数和方法,实现必须与声明的名称、可见性、类型参数、参数类型、返回类型、约束和 effect 匹配。对于已声明的类型,实现必须与声明的可见性和类型参数列表匹配。对于已声明的实现关系,被实现的 trait、目标类型、可见性和类型参数都必须匹配。

错误示例#

declare pub fn declared_increment(x : Int) -> Int

pub fn declared_increment(x : Int) -> Double {
  x.to_double()
}

声明中 declared_increment 返回 Int,但实现返回 Double

建议#

修改声明或实现,使公开契约只有一种写法。

declare pub fn declared_increment(x : Int) -> Int

pub fn declared_increment(x : Int) -> Int {
  x + 1
}