E4113

E4113#

构造函数没有给定名称的字段。

当试图访问构造函数模式中不存在的字段时,会发生此错误。在 MoonBit 中,当与具有命名字段的构造函数进行模式匹配时,您只能访问在构造函数声明中定义的字段。

此情况通常发生在:

  • 拼错字段名

  • 试图访问存在于其他构造函数中的字段

  • 试图访问已从类型定义中删除或重命名的字段

错误示例#

///|
pub enum E {
  A(a~ : Int)
}

///|
pub fn f(x : E) -> Unit {
  match x {
    A(..) as a => {
      println(a.a)
      println(a.b)
      //            ^^^ Error: Constructor A of type E has no field b.
    }
  }
}

建议#

要修复此错误,您可以执行以下操作:

  • 将缺少的字段添加到构造函数中

///|
pub enum E {
  A(a~ : Int, b~ : Bool)
}

///|
pub fn f(x : E) -> Unit {
  match x {
    A(..) as a => {
      println(a.a)
      println(a.b)
    }
  }
}

///|
test {
  f(A(a=1, b=true))
}
  • 删除不正确的字段访问