E4094

E4094#

不能修改只读字段。

对于只读结构体,您不能使用赋值在定义类型的包之外修改字段的值。

错误示例#

假设您在模块 username/hello 中有一个包 a

a/moon.pkg:


a/a.mbt:

///|
pub struct T {
  mut value : Int
}

///|
pub fn T::new() -> T {
  T::{ value: 0 }
}

///|
pub fn T::set(self : T, value : Int) -> Unit {
  self.value = value
}

您在相同模块中还有另一个包 b

b/moon.pkg:

import {
  "moonbit-community/E4094/a",
}

b/b.mbt:

///|
test {
  let a = @a.T::new()
  a.value = 3 // Error: Cannot modify a read-only field: value
}

建议#

如果您可以控制定义该类型的包,请通过该包中的方法暴露修改操作。

a/a.mbt:

///|
pub struct T {
  mut value : Int
}

///|
pub fn T::new() -> T {
  T::{ value: 0 }
}

///|
pub fn T::set(self : T, value : Int) -> Unit {
  self.value = value
}

b/b.mbt:

///|
test {
  let a = @a.T::new()
  a.set(3)
}