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)
}