E4087#
尝试修改不可变的对象,例如变量或结构体的字段。
MoonBit 要求程序员明确声明可变的变量和结构体字段。请注意,MoonBit 中变量的可变性仅指变量本身,而不是它持有的值。如果您声明了一个不可变的变量,但变量的类型是 Array[T]
、Ref[T]
或有可变字段的 struct
,您依然可以修改变量的内部结构,只是不能整个替换变量的值。
元组永远是不可变的,如果想要可变性,应当使用有可变字段的 struct
。
错误示例:#
test {
let a = @ref.new(0)
a = @ref.new(1) // Error: The variable a is not mutable.
a.val = 1 // This is valid, because the mutability come from `Ref` type itself
println(a)
}
struct S {
x : Int
}
test {
let s = { x: 1 }
s.x = 2 // Error: The field `x` is not mutable.
}
建议#
为了修复此错误,您需要将变量或结构体字段声明为可变的,方法是在变量名前添加 mut
关键字。
test {
let mut a = 0
a = 1
println(a)
}
struct S {
mut x : Int
//^^^
}
test {
let s = { x: 1 }
s.x = 2
}