E4036

E4036#

无法创建只读类型的值。

错误示例:#

lib/lib.mbt 中,我们声明了一个带有私有字段 __private 的结构体 R

pub(all) struct R {
  x : Int
  priv __private : Int
}

pub fn R::new(x : Int) -> R {
  { x, __private: 42 }
}

main/main.mbt 中,我们试图创建一个类型为 R 的值:

pub fn make() -> @lib.R {
  { x: 1, __private: 42 }
}

这会在第 1 行报错:

Cannot create values of struct type @lib.R because it contains private field(s).

建议#

使用公开构造函数构造值:

pub fn make() -> @lib.R {
  @lib.R::new(1)
}